
- 插入排序是将要排序的数组,分成两部分。一部分为有序,一部分为无序(待排序的数组)。
默认有序中有一个元素(因为只有一个元素,随便怎么放都是有序的),则无序中的元素有-1个。 - 先从有序的第一个 元素与 无序最后一个比较 若无序的第一个比有序的最后一个大则直接插入该入后面,否则进行寻找
若无序的第一个比有序的最后一个小则则往有序在前一个寻找或把整个有序寻找完(数组的索引为-1则表示寻找完毕) - 若要进行排序的数组是 int[] array=new int[]{101,34 ,119, 1}; 有序101,无序34 119 1
int[] array=new int[]{101,34 ,119, 1};
// 有序101 无序 34 119 1
//保存待插入的数据和相关索引
int temp=array[1];
//待插入数的请一个索引 ; 有序最后一个数。
int index=1-1;
// 进行比较
// index>=0 保证了数组下标不越界
// temp
while(index>=0&& temp<array[index]){
// 将索引指向的数进行重新赋值, 前一个数赋值给后一个数
array[index+1]=array[index]
// 记录有序的索引 ,指向下一个元素在进行比较
index--;
}
//遍历结束后的数组101,101 ,119, 1
// 循环遍历完之后temp>=array[index],index<0
// index+1 是因为要插入的,在index的前一个,array[index]=array[index+1]前一个数,覆盖后一个数,有两个相同的数组,待插入的数已经保存到temp里,所以只要插入索引的前一个数
array[index+1]=temp;
//进行插入 *** 作后,34 ,101,119,, 1
第二个元素的插入过程
int[] array=new int[]{101,34 ,119, 1};
int temp=array[2];
//待插入数的请一个索引 ; 有序最后一个数。
int index=2-1;
while(index>=0&& temp<array[index]){
// 将索引指向的数进行重新赋值, 前一个数赋值给后一个数
array[index+1]=array[index]
// 记录有序的索引 ,指向下一个元素在进行比较
index--;
}
array[index+1]=temp;
//进行插入 *** 作后
//进行插入 *** 作后,34 ,101,119,, 1
一个循环
//array.length不需要减一 ,因为已经越过一个元素进行排序了 默认 array【0】 ,有序
for(int i=1;i<array.length;i++){
int[] array=new int[]{101,34 ,119, 1};
int temp=array[i];
//待插入数的请一个索引 ; 有序最后一个数。
int index=i-1;
while(index>=0&& temp<array[index]){
// 将索引指向的数进行重新赋值, 前一个数赋值给后一个数
array[index+1]=array[index]
// 记录有序的索引 ,指向下一个元素在进行比较
index--;
}
array[index+1]=temp;
}
- 在寻找合适的位置是temp
- 直到temp>=array[index] ,则表示找到了,索引待插入数 应该插入 index索引的后一一个位置 (从小到大)array【index+1】=temp
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)