• 插入排序


    插入排序的步骤

    (1)在第一轮里,暂时将索引1(第2格)的值移走,并用一个临时变量来保存它。这使得该索引处留下一个空隙,因为它不包含值。

    在之后的轮回,我们会移走后面索引的值。

    (2)接着便是平移阶段,我们会拿空隙左侧的每一个值与临时变量的值进行比较。

    如果空隙左侧的值大于临时变量的值,则将该值右移一格。

    随着值右移,空隙会左移。如果遇到比临时变量小的值,或者空隙已经到了数组的最左端,就结束平移阶段。

    (3)将临时移走的值插入当前空隙。

    (4)重复第(1)至(3)步,直至数组完全有序。

    插入排序的效率

    N^2比较和平移的合计+N-1次移除+N-1次插入=N^2+2N-2步

    大O只保留最高阶的N。

    O(N^2+2N-2)还得进一步简化成O(N^2)。

    Python实例:

    def insertion_sort(array):    
        for index in range(1, len(array)): // 发起一个从索引1开始的循环来遍历数组。变量index保存的是当前索引。
            position=index // 给position赋值为index,
            temp_value=array[index] // 给temp_value赋值为index所指的值。
            while position > 0 and array[position - 1] > temp_value: // 在内部发起一个while循环,以检查position左侧的值是否大于temp_value。    
                array[position]=array[position - 1] // 若是,则用array[position]=array[position - 1]将该值右移一格       
                position=position - 1 // 并将position减1
                array[position]=temp_value    
    
    array = [8,4,2,3];
    insertion_sort(array);        
    print array

    参考:数据结构与算法图解.6

  • 相关阅读:
    cocos2d JS-(JavaScript) 冒泡排序
    JavaScript实现字符串逆置的几种方法
    JavaScript 常用数组函数方法专题
    Cocos Creator 资源加载(笔记)
    cocos中FPS数值的含义
    Cocos Creator cc.Event点击触摸事件详解
    Cocos Creator 鼠标事件
    Cocos Creator 触摸点击事件
    Cocos Creator 键盘监听事件
    JavaScript 基础数组循环和迭代的几种方法
  • 原文地址:https://www.cnblogs.com/ooo0/p/12151908.html
Copyright © 2020-2023  润新知