一、解决方案
给定数组 a = [9,3,7,2,5,8,1,4], 对数组进行插入排序
将数组分为两个区域,排序区域和未排序区域,每一轮从未排序区域中取出第一个元素,插入到排序区域(需保证顺序)
重复以上步骤,直到整个数组有序
双重循环,第一重循环i从1开始,a[i]作为要插入的元素,记录为tmp,第二重循环从j开始,倒着往回找,一旦j的数大于tmp,就将j的数往后挪,空出位置将tmp插入。
二、代码
public static void insert(int[] a){for (int i = 1; i < a.length; i++) {//要插入的元素int tmp = a[i];int j = i - 1;while(j>=0){if(a[j]>tmp){a[j+1] = a[j];}else{break;}j--;}a[j+1] = tmp;}System.out.println(Arrays.toString(a));}
三、与选择排序比较
- 大部分情况下,插入都略优于选择;
- 有序集合插入的时间复杂度为O(n);
- 插入属于稳定排序算法,而选择属于不稳定排序。
