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

本文详细描述了插入排序算法的过程,通过逐步将区间外数据插入已排序区间来保证整个数组有序。时间复杂度为O(n²),但在最好情况下能达到O(n),空间复杂度为O(1)。提供了Java和Kotlin的代码实现。
摘要由CSDN通过智能技术生成

原理

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

从局部扩散到整体。

第一次:保证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],交换两个值。

图解

在这里插入图片描述

复杂度

时间复杂度 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)  
            }  
        }  
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值