一、插入排序的算法思路
对于待排序的n个记录(R1, R2, R3 ,`````,Rn ),假设第一个记录R1 有序, 然后从第二个记录R2 开始依次将其插入到前面的有序序列中。
二、java代码
public class InsertSort{
public static void sort(long[] array){
long temp;
for(int i=1;i
0&&array[j-1])>temp){
array[j]=array[j-1];//数据整体后移
j--;
}
array[j]=temp;//一直移动到比temp值小为止,数据插入
}
}
}
二、代码的理解
1、
for 循环控制的是假定的插入值
,因此根据算法思路,i
的初始值为1。
2、 while循环用来判断比较 假定的插入值(temp) 与前面数据的大小。
判断区域是变量 i 之前的数据区。
变量 j 是用来比较 ,变量 i 之前数据区内是否有比temp值还大的数据。
若前面的数据比temp大,则让前面的数据整体后移;
最后所有比temp大的数据都向后移,
那么前面下标为 j
的位置就是插入点,
接着让temp插入到 j
位置;
那么temp就插入到了比它大的数据的前面。
3、对下图array 数组进行插入排序过程
3 | 1 | 15 | 5 | 2 | 20 |
第一次for 循环,比较区域 {3 , 1} ,temp=1,数据3比temp大,比较结果 {1 ,3 } ;
第二次 for 循环,比较区域 { 1,3 ,15 }, temp=15, 比较结果{1,3 ,15} ;
第三次 for 循环,比较区域 {1,3 ,15 ,5}, temp=5,数据15比temp大,比较结果{1, 3, 5, 15} ;
第四次for 循环,比较区域{1 , 3, 5 ,15 ,2},temp=2,数据3 ,5 ,15 比temp大,比较结果{1 ,2,3 , 5, 15} ;
第五次for 循环,比较区域{ 1,2,3,5,15,20},temp=-1,比较结果{1,2,3,5,15,20}。
三、总结
插入排序就是 假定了数组内第二个位置是一个插入值,
用大循环for来
遍历数组内除第一个位置上数据外的全部数据,
再用while循环来判断比较插入值之前的数据大小,
一直移动到比插入值还小的位置处结束,
最后把这个数据值插入进去。