直接插入排序方法是稳定的算法,其平均时间复杂度O(n^2)
先打个预防针:
稳定排序的算法有直接插入排序、冒泡排序、归并排序。
不稳定的排序算法有希尔排序、快速排序、简单选择排序和堆排序。
时间复杂度为O(n^2)的有直接插入排序、冒泡排序、快速排序、简单选择排序
时间复杂度为O(nlogn)的有堆排序和归并排序
空间复杂度为O(n)的是归并排序,O(logn)是快速排序,其余的都是O(1)
思想:先将序列中第1个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。
废话不多说,直接上代码
java实现代码:
public class InsertSort {
public void sort(int[] a){
for (int i =1;i<a.length;i++){
if(a[i]<a[i-1]){
//记录当前位置
int index = i;
//记录当前值
int valuse = a[i];
//依次后移
for (int j = i-1;j>0 && a[j]>valuse;j--){
a[j+1] = a[j];
index = j;
}
a[index] = valuse;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {1,4,2,5,3};
InsertSort sort1 = new InsertSort();
sort1.sort(a);
for (int i =0;i<a.length;i++){
System.out.print(a[i]);
}
}
}