插入排序
插入排序好似我们打扑克牌时放牌一样,
假如有这样一个数组:
1.把数组分成两个部分,已排序区和未排序区,假如我们认为第一个数已排序
2.将 index=1的和已排序区的末尾数进行比较,如果比2小就交换:
3. 交换以后我们认为index 等于0和1的我们排好序了;然后继续5来放入已排序的扑克牌中
再将index=3的扑克牌插入到已排序中
4.1比5小,1和5交换:
然后1比3小,又和3交换
1和2比,1<2,交换:
5.8比5大,不交换
完成排序
代码:
1 package com.sort.demo; 2 3 public class InsertSort extends Sort { 4 5 @Override 6 public void sort(int[] arr) { 7 for (int i = 1; i < arr.length; i++) { 8 for (int j = i; j >=1 && arr[j] < arr[j - 1]; j--) { 9 swap(arr, j, j - 1); 10 } 11 } 12 } 13 14 public static void main(String[] args) { 15 InsertSort sort = new InsertSort(); 16 Test.test(sort); 17 } 18 19 }
时间复杂度,如果是有序数组,则时间复杂度是O(N)
如果是倒序,时间复杂度是O(n²)
空间复杂度是O(1)