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

来源:互联网 发布:java 手动编译web项目 编辑:程序博客网 时间:2024/06/05 16:29
        上一节我们学习了选择算法,这一节来学习插入算法,算法系列文章目录在这里


介绍


        插入算法与选择算法类似,只不过“方向相反”,他的特点就是依次选择当前索引右边的元素,有序的插入当前索引左边的序列中,步骤如下:
        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的算法实战比较》 
阅读全文
0 0
原创粉丝点击