Java 实现插入算法
思想
将一个数组分为两个部分:
排好的部分------>1
没有排好的部分------->2
将2的部分的第一个元素依次跟前面的每个数相比,遇到比其大的就继续向前比较;
直到遇到比他小的数,然后插入这个数的后面。
具体实现步骤
1.从第一个元素开始,将第一个元素看作是已经排好的数。
2.取出下一个元素,然后与前面排好的元素相比(从后向前依次比较)。
3.直到这个元素遇到比他小的元素。
4.将新元素插入到该元素的后面。
5.重复以上步骤。
实现代码
public class Insert {
public static void main(String[] args) {
int[] arr = {5,2,4,1,3,6,5,7,8,9};
insert(arr);
// System.out.println(Arrays.toString(arr));
}
public static void insert(int[] arr) {
int j = 0;
//循环的轮数 i=1没有必要和自己比
for (int i = 1; i < arr.length; i++) {
//拿出需要排序的元素
int temp = arr[i];
//j=i-1,将排好的控制在数组的左边
/*
1.判断条件arr[j]>temp 将需要排序的元素向前比较
直到找到比这个数大的(因为i-1之前的元素我们是排好的)
2.j>=0,当不满足这个条件时,说明这个数目前最小,需要排在第一个
*/
//j--是为了向前扫描
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
//将满足循环时,每比较一次就把该元素向后移动一位
arr[j + 1] = arr[j];
}
//将需要插入的元素,插入数组中
//j+1是因为,最后一次循环后(j--)多减了一次
arr[j + 1] = temp;
System.out.println("第"+i+"次循环后:"+Arrays.toString(arr));
}
}
}