今天我们要讲的排序算法是插入排序,插入排序顾名思义就是将待排序的数字插入到合适的位置去。
我们来先看一张插入排序的原理图:
(图片来自网络)
下面我们来看一下代码实现:
public static int[] insertionSort(int[] arr){
int len = arr.length; //数组的长度
for(int i = 1;i<len;i++){ //获取需要排序的数字
for(int j=i;j>0;j--){ //和之前已经拍好序的数字比较
if(arr[j]>arr[j-1]){ //如果无序 则进行交换
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
return arr;
}
我们看到插入排序也需要两层for循环,在最坏情况下,数组完全倒序,它的最坏时间复杂度是O(n2)
在最好情况下,也就是数组已经有序,它的最好时间复杂度是O(n)
同时,插入排序只有arr[j]>arr[j-1]时才进行交换
if(arr[j]>arr[j-1]){ //如果无序 则进行交换
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
两个相等数字,在排序前后它们的顺序是不变的,
插入排序是一个稳定的排序算法。