算法系列之--Javascript和Kotlin的插入算法(原)

Posted 工程师阿杜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法系列之--Javascript和Kotlin的插入算法(原)相关的知识,希望对你有一定的参考价值。

上一节我们学习了选择算法,这一节来学习插入算法,算法系列文章目录在这里


介绍


        插入算法与选择算法类似,只不过“ 方向相反”,他的特点就是依次选择当前索引右边的元素, 有序的插入当前索引左边的序列中,步骤如下:
        1. 从第一个元素开始, 该元素可以认为已经被排序
        2. 取出下一个元素,在 已经排序的元素序列中从后向前扫描
        3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
        4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
        5. 将新元素插入到该位置后
        6. 重复步骤2~5


特点


        可以解决 两个有序列表的合并问题,将第二个序列放在第一个序列后面,进行选择插入排序即可


效率


        平均时间复杂度O(n^2)
        最坏时间复杂度O(n^2)
        最优时间复杂度O(n)


源码


Js源码

let list = [123456, 4, 8, 23, 5, 13, 323, 1, 9, 2, 3]
for (let i = 1; i < list.length; i++) 
    for (let j = i; j > 0; j--) 
        if (list[j] > list[j - 1]) 
            //已经找到位置,停止循环
            break
        
        let temp = list[j]
        list[j] = list[j - 1]
        list[j - 1] = temp
    


Kotlin源码

private var ARRAY_COUNT = 100000
/*
 * 获取随机数列
 */
private fun getSortList(): IntArray 
    var sortList = IntArray(ARRAY_COUNT)
    var ra = Random()
    for (i in sortList.indices) 
        sortList[i] = ra.nextInt(ARRAY_COUNT * 10)
    
    return sortList

/*
 * 交换数列元素
 */
private fun swapByIndex(list: IntArray, x: Int, y: Int) 
    var temp = list[x]
    list[x] = list[y]
    list[y] = temp

/*
插入算法
 */
private fun chaRu() 
    var sortList = getSortList()
    for (i in 1 until sortList.size) 
        for (j in i downTo 1) 
            if (sortList[j] > sortList[j - 1]) 
                //已经找到当前元素要插入的位置
                break
            
            swapByIndex(sortList, j - 1, j)
        
    


        下一节我们来学习一种在插入算法基础上设计的更为高效的排序算法----希尔算法

         各个算法的Kotlini版本性能测试结果请看 算法系列之--Kotlin的算法实战比较 》 

以上是关于算法系列之--Javascript和Kotlin的插入算法(原)的主要内容,如果未能解决你的问题,请参考以下文章

算法系列之--Javascript和Kotlin的冒泡算法(原)

算法系列之--Javascript和Kotlin的基数排序算法(原)

算法系列之--Javascript和Kotlin的堆排序算法(原)

算法系列之--Javascript和Kotlin的希尔排序算法(原)

算法系列之--Javascript和Kotlin的快速排序算法(原)

算法系列之--Kotlin的算法实战比较(原)