基本思想是: 将数组的第一个数认为是有序数组从后往前(从前往后)扫描该有序数组把数组中其余n-1个数根据数值的大小插入到有序数组中,直至数组中的所有数有序为止,这样的话n个元素需要进行n-1趟排序。
平均时间复杂度: 最坏情况O(n^2) 最好情况O(n)
空间复杂度: O(1)
算法稳定性: 稳定
动图展示:
代码实现:
/**
* @Author huang.bX
* @Date 2021/7/13
*/
public class InsertSort {
public static void main(String[] args) {
int[] array = new int[]{4,3,5,7,6,8,5,4,3};
insertSort(array);
System.out.println(Arrays.toString(array));
}
public static void insertSort(int[] array){
//遍历所有数
for (int i=1;i<array.length;i++){
//如果当前数比前一个数小 就要交换
if (array[i]<array[i-1]){
int temp=array[i];
//遍历当前数字前面的所有数字
int j;
for(j=i-1;j>=0&&temp<array[j];j--){
array[j+1]=array[j];
}
array[j+1]=temp;
}
}
}
}
测试结果:
动图参考:https://www.runoob.com/w3cnote/insertion-sort.html