接下来是插入排序,插入排序类似于平常打牌,抽到的新牌依次向前比较,放到它对应的位置上。时间复杂度是O(N^2),空间复杂度是O(1),稳定。O(N^2)的时间复杂度是插入排序的最差情况,即完全逆序的情况,所以常数项是冒泡排序、选择排序中最低的。
图片的直观展示如下:
相关的代码如下:
public static void main(String[] args) {
int[] nums = new int[]{1,2,5,2,0,0,1};
insertionSort(nums);
for (int i : nums){
System.out.println(i);
}
}
public static void insertionSort(int[] arr) {
if(arr == null || arr.length < 2){
return;
}
//核心代码,依次保证0 ~ i的排序
for (int i = 1; i < arr.length; i++){
//依次将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 tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}