插入排序1

本文深入探讨了插入排序的原理,通过从前向后遍历数组,依次将每个数据插入到已排序部分的正确位置,保持排序稳定。代码示例展示了如何实现插入排序,同时分析了其时间复杂度为O(N^2),空间复杂度为O(1)。该算法在小规模或部分有序的数据中表现较好。
摘要由CSDN通过智能技术生成

理解:

从前向后遍历数组,得到的每个数据依次向前移动, 并与已排序数据俩俩依次比较,并选择合适的位置插入


代码:

function insertionSort(arr) {
    // 特殊数据处理
    if (arr == null || arr.length < 2) {
        return
    }
    // 外层循环 待排序区域  
    // 待排序数据依次进入到已排序区域
    for (let i = 1; i < arr.length; i++) {
        // 内层循环 已排序区域  
        // 待排序数据从后向前依次选择合适的位置插入
        //  俩俩比较有点类似向前冒泡
        for(let j = i; j > 0; j--){
            // 前一个数据大于自己时即交换
            // 前一个数据小于或等于自己时则不交换   并退出循环
            // 这样可保持稳定性
            if (arr[j - 1] > arr[j]) {
                swap(arr, j - 1, j)
            }else{
                break
            }
        }
    }
    function swap(arr, i, j) {
        let tmp = arr[i]
        arr[i] = arr[j]
        arr[j] = tmp
    }
    // 直接在原数组进行修改 可以没有返回值
}

性能:

  • 时间复杂度:O(N^2)
  • 空间复杂度:O(1)
  • 稳定性:可以保持,遇到相等值的元素不进行交换,直接跳过即可保持稳定性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值