zoukankan      html  css  js  c++  java
  • 插入排序

    插入排序的步骤

    (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

  • 相关阅读:
    QT中的列表容器
    QT中的Buttons
    QT中的常用控件
    [机房测试]弟娃
    CF1580C Train Maintenance
    [机房测试]数据恢复
    Sentry 监控
    Sentry 监控
    Sentry 监控
    Sentry 后端监控
  • 原文地址:https://www.cnblogs.com/ooo0/p/12151908.html
Copyright © 2011-2022 走看看