算法思想
直接插入排序的基本思想是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过为止。
实现过程
①. 从第一个元素开始,该元素可以认为已经被排序
②. 取出下一个元素,在已经排序的元素序列中从后向前扫描
③. 如果已经排好序的最后一个元素比这个取下的值大,将该元素移到下一位置
④. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⑤. 将新元素插入到该位置后
⑥. 重复步骤②~⑤
代码实现
/**
* ClassName:StraightInsertionSort1
* Author:LFM
* Date:2019/6/16 17:12
**/
public class StraightInsertionSort1 {
public static void main(String[] args) {
int [] a = {6,9,1,2,8,7};
System.out.println("排序前:"+ Arrays.toString(a));
sort(a);
System.out.println("排序后:"+Arrays.toString(a));
}
public static void sort(int[] a) {
if (a == null || a.length == 0) {
return;
}
for (int i = 1; i < a.length; i++) {
int j = i - 1;
int temp = a[i]; // 先取出待插入数据保存,因为向后移位过程中会把覆盖掉待插入数
while (j >= 0 && a[j] > temp) { // 如果是比待插入数据大,就后移
a[j+1] = a[j];
j--;//达到从后向前比较的效果
}
a[j+1] = temp; // 找到比待插入数据小的位置,将待插入数据插入
}
}
}
运行结果
时间复杂度
直接插入排序不是稳定的排序算法。