前奏
是相当于一种时间复杂度中的平方阶概念的数组排序算法
思路
思路:
1:创建一个外层循环默认索引从1开始,判断条件直到小于总长度
2:将当前外层循环索引元素存储到一个变量中保存,并将当前外循环索引页保存到一个变量上
3:创建一个内循环while遍历条件 (外循环索引-1>=0)之间中的排好序的索引元素从后往前遍历
4:循环判断当前内循环指定的索引元素与外循环元素是否大于
如果大于就将当前内循环索引元素移动至内循环+1索引位置上 依次类推 并再一次更新内循环索引=内循环索引--
如果小于就退出内循环 然后将外循环索引对应的元素存储到内循环索引+1上即可
课外仅供参考
课外:如果与一组8000个数据的数组排序的情况下 时间差不多10---20毫秒之间
如果与一组80000个数据的数组排序的情况下 时间差不多500---800毫秒之间
如果与一组800000个数据的数组排序的情况下 时间差不多60几秒中
如果是一组接近于有序的80000000个数据 时间差不多50毫秒不到
特点:中小规模基本有序列表用插入很高效,也就是数据有序层度越高,插入排序算法就越高效
图解1
代码
提示:如果将从小到大顺序变成从大到小顺序,改对应的将> 改成<
注意:待插入的元素要预先保存起来不然会被移动指针往后移动给覆盖掉
//插入排序版本3
public static void insertSortVersion3(int [] sort){
//创建2个变量一个存储插入的元素一个存储插入的索引
int insertElement;
int insertIndex;
//创建外循环比作与未比较的区域索引元素范围
for(int index=1;index<sort.length;index++){
//创建当前未比较区域索引的元素及索引
insertElement=sort[index];
insertIndex=index;
//循环一个内循环区域(有序列表区域)
while(--insertIndex>=0&&insertElement<sort[insertIndex]){
//就将有效列表区域中对应的insertIndex索引元素往后移动一下
sort[insertIndex+1]=sort[insertIndex];
}
//将当前带插入的元素插入到指定索引下的有序列表区域
sort[insertIndex+1]=insertElement;
}
}