算法思想:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序地插入到已排好序的记录子集中,直到将所有待排序记录全部插入为止。
例子:举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然后3要插到5前面,把5后移一位,变成3,5,8,6,4.想一下整理牌的时候应该也是这样吧。然后8不用动,6插在8前面,8后移一位,4插在5前面,从5开始都向后移一位。注意在插入一个数的时候要保证这个数前面的数已经有序。简单插入排序的时间复杂度也是O(n^2)。
package com.haobi;
/*
* 插入排序(升序)
* 1、使用temp临时保存待插入记录
* 2、从后往前查找应插入的位置
* 3、查找与移动在同一循环中完成
*
*/
public class InsertSort {
//对数组a直接做插入排序
public static void insertSort(int[] a) {
if(a != null) {//如果数组不为空
for(int i=1;i<a.length;i++) {//经历a.length-1次循环进行插入排序
int temp = a[i];//存放待插入数据
int j = i;
if(a[j-1]>temp) {//如果待插入数的前一个数大于待插入数,需要进行插入排序
while(j>=1 && a[j-1]>temp) {//从已排好序的子集里找到合适的插入位置,并进行相应的数据交换
a[j] = a[j-1];
j--;
}
}
a[j] = temp;//将待插入的数据插入
}
}
}
public static void main(String[] args) {
int[] array = {64,5,7,89,6,24};
insertSort(array);
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
}
}
程序输出结果如下:
5 6 7 24 64 89