一、基本思想
通过构建有序序列,从前往后扫描未排序序列,依此取出未排序序列元素,然后从后往前扫描有序序列,找到相应位置并插入。该算法一个进行n-1趟插入,每一趟插入要进行n-k(k为第k趟插入)次比较,所有插入排序的时间复杂度为O(n2),空间复杂度为O(1).
二、实现步骤
- 首先将待排序序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
- 从头到尾依次扫描未排序序列,将扫描到的每一个元素插入到有序序列相应的位置。
三、图解
四、代码实现
public class JavaSort { public static void main(String[] args) { int a [] =new int []{1,5,4,10,6,29,5,20}; System.out.println("排序前的数组:"+Arrays.toString(a)); insertSort(a); System.out.println("排序后的数组:"+Arrays.toString(a)); } /** * * @param ary 要排序数组 * @return 已排序的数组 */ public static int [] insertSort(int [] ary) { for (int i = 1; i < ary.length; i++) { int j=i;//j为要插入元素下标 int temp=ary[i];//暂存要插入的元素 while(j>0&&ary[j-1]>temp) {//将要插入元素与已排序的数组元素进行比较,找到要插入的位置 ary[j]=ary[j-1]; j--; } ary[j]=temp;//插入要插入的元素 } return ary; } }