思路:
//
//int[] array = {-2,-5,11,-9,8};
//假设要对数组从小到大排序
// //思路:如果无序部分的第一个元素array[i],比对有序部分最后一个元素array[i-1],
// //若array[i]>array[i-1]则不作变化,从小到大顺序一致
// //若array[i]<array[i-1],则array[i-1]向后挪动一个位置,与array[i-2]比较。。。以此类推直到比对到比它array[i]小的元素为止,当然不能突破前置边界
// //定义要比对的元素及下标,i>=1
// int coppeteiveIndex = i-1;
// int coppeteiveValue = array[i];
// while(array[i] < array[coppeteiveIndex] && coppeteiveIndex >-1){
// //若array[i]<array[i-1],则array[i-1]向后挪动一个位置
// array[coppeteiveIndex+1] = array[coppeteiveIndex];
// //比对前一个元素
// coppeteiveIndex--;
// }
// //跳出时,要么是找到了比array[i]小的元素,要么是比对完了发现自己最小
// //1、此时array[i]> array[coppeteiveIndex],则array[coppeteiveIndex+1] = array[i]
// //若比到队首还没找到比array[i]小的,此时coppeteiveIndex==-1;array[coppeteiveIndex+1]即为array[0],array[i]排到队首也满足
// //array[coppeteiveIndex+1] = array[i]
// array[coppeteiveIndex+1] = array[i];
//然后取无序部分第二个元素插入。。。
public static void main(String[] args) {
//插入算法
//思路:以数组第一个元素作为有序部分,其他元素为无序部分
//将第二个元素插入到有序部分,将第三个元素插入到有序部分。。。将第n个元素插入到有序部分
int[] array = {-2,-5,11,-9,8};
System.out.println("排序前");
System.out.println(Arrays.toString(array));
for (int i = 1; i <array.length ; i++) {
int coppeteiveIndex = i-1;
int coppeteiveValue = array[i];
//coppeteiveIndex >-1这个条件要在前,不然后面array[coppeteiveIndex]可能为array[-1]
while(coppeteiveIndex >-1 && coppeteiveValue < array[coppeteiveIndex] ){
//若array[i]<array[i-1],则array[i-1]向后挪动一个位置
array[coppeteiveIndex+1] = array[coppeteiveIndex];
//比对前一个元素
coppeteiveIndex--;
}
array[coppeteiveIndex+1] = coppeteiveValue;
System.out.println("第"+i+"遍遍历完");
System.out.println(Arrays.toString(array));
}
}