特点:
第n次排序之后,前 n+1 像元素有序,稳定
思想:
以从小到大排序为例:
从第二个元素开始,依次比较元素 i 与 i 之前的元素 j 的大小,若 i < j,交换 i 与 j 的位置,直到 i 为第一个元素或 i 不小于它之前的元素为止。
最好 | 最坏 | 平均 | |
时间复杂度 | O(n)——待排数组基本有序 | O(n * n) | O(n * n) |
空间复杂度:O(1)
public class InsertionSort {
/**
* @yjw 2018/07/09
* 对于第n次排序,保证前n-1个元素有序
* 从第二个元素开始,对于每一个元素,比较该元素与其前一个元素之间的大小
* 若符合条件则交换,不符合条件或该元素已经为第一个元素则进行下一个元素的处理
* @param arr 待排序数组
*/
public static void insertionSort(int[] arr){
if(arr == null || arr.length < 2){
return;
}
for(int i = 1; i < arr.length; i++){
for(int j = i-1; j >= 0 && arr[j] > arr[j+1]; j--){
swap(arr, j, j+1);
}
}
}
public static void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}