/**
* 算法思想:从数组的第二位开始逐个将之后的元素插入数组之中,
* 整个过程保证插入新数据之前,已有的数组是排好序的。
* 每次插入新数据时,将新数据与已有数组最后一个元素比较,
* 如果新数据较小,将已有的数组中进行比较的这个数据后移一位,
* 再将新数据与已有数组的前一位比较,如果还是新数据较小,
* 再将进行比较的数据后移一位,直到找到新数据的位置,将新数据赋值给这一位。
* 最后一个数据插入数组后排序完成。
*/
static void sort(int[] arr){
for (int i = 1; i < arr.length; i++) {
//如果新元素小于已有数据的最大值,那么移动数据时会覆盖arr[i],所以定义临时变量保存arr[i]
int temp = arr[i];
int j;//在内层循环之外定义循环变量是为了在循环结束后,将新插入的数据赋值给找到的位置
/*
* 从新数据的前一位开始,依次与新数据比较,如果大于新数据,该数据后移一位。
* 由于原数据是有序的,所以第一个小于新数据的位置的后一位就是新数据应该插入的位置。
* 如果没有小于新数据的数据,j=-1时退出循环,新数据插在第一位,也能保证插入正确。
*/
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
}
java插入法排序学习笔记
最新推荐文章于 2022-09-17 18:17:07 发布