数据结构与算法:插入排序

原理

保证区间内排好顺序,逐渐将区间外数据插入到该区间中。

从局部扩散到整体。

第一次:保证0-1范围内有序
arr[0]和arr[1]对比,若arr[0] 大于 arr[1] ,交换两个值,
0-1范围内有序。

第二次:保证 0-2 范围内有序。
arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。
arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。
至此,0-2范围内有序。

第三次:保证0-3范围内有序
arr[3]和arr[2]比,若 arr[2] 大于arr[3],交换两个值。
arr[2]和arr[1]比,若 arr[1] 大于arr[2],交换两个值。
arr[1]和arr[0]再比,arr[0] 大于 arr[1] ,交换两个值。
至此,0-2范围内有序。

第i次:保证0-i范围内有序
arr[i]和arr[i-1]比,若 arr[i-1] 大于arr[i],交换两个值。

图解

数据结构与算法:插入排序_第1张图片

复杂度

时间复杂度 O(n²)

  • 最好情况 O(n)
  • 最差情况 O(n²)
    额外空间复杂度 O(1)

代码实现

java
public static void insertSort(int[] array) {  
    if (array == null || array.length < 2) {  
        return;  
    }  
  
    for (int i = 1; i < array.length; i++) {  // 控制第几次循环  
        for (int j = i; j > 0; j--) {  
            if (array[j] < array[j - 1]) {  
                swap(array, j, j -1);  
            }  
        }  
    }  
}
kotlin
fun insertionSort(array: IntArray) {  
    if (array.size < 2) {  
        return  
    }  
  
    for (i in 1 until array.size) {  // 0 ~ i 做到有序   抓扑克牌  
        for (j in i - 1 downTo 0) {  
            if (array[j] > array[j + 1]) {  
                swap(array, j, j + 1)  
            }  
        }  
    }  
}

你可能感兴趣的:(数据结构与算法,算法,数据结构,排序算法,插入排序)