zoukankan      html  css  js  c++  java
  • 基本排序算法原理和优化

    (原创)

    本文讨论基本排序算法的原理和优化 

    1.插入排序(insertion sort)
    新元素,插入到已排好序的序列中去,得到新的有序列

    2.选择排序(selection sort)
    每轮选最值

    3.归并排序 merge sort
    分为两个过程
    (1)不断分割,直至单元素
    (2)合并两个有序列的方法
    先不断分割,再用合并的方法不断合并

    4.堆排序 heap sort
    (1)建树,且是max-heap,父节点>=子节点
    (2)root和尾节点交换,root节点值归入有序组
    (3)尾结点交换到root后的新树,再进行heapify得到新max-heap
    (4)重复(2)

    5.希尔排序 shell sort
    插入排序的改进,
    每次对隔gap的元素(list[i] 和 list[i+gap])比较大小, 使隔gap的子序列是有序的。
    不断二分gap至1,重复上面过程

    6.冒泡排序
    每趟相邻两元素比较,交换出最大值到最右。

    7.快速排序
    (1)基本原理
    选一个中介,调整数列,使中介左边部分小于中介,右边部分大于等于中介
    再对左右两部分递归

    (2)工业优化要点

    * 各函数(整数操作,指针操作,控制流,比较函数,交换函数)的耗时分析
    * 双向由两个指针来遍历,而不是用一个指针单向遍历,减少交换次数
    * 选取中介值的取样,尽可能的做到分割的数量差不多
    * 相同元素很多的情况考虑,三段分法
    * 小数组(小于20)直接用插入排序
    * 多线程技术

  • 相关阅读:
    逻辑卷的创建
    文件及目录的权限详解
    python之数据驱动Excel+ddt操作(方法二)
    python之数据驱动Excel操作(方法一)
    python + Excel数据读取(更新)
    selenium3 + python
    python+selenium+unittest发送Mail163邮件(PO)
    python自动发邮件库yagmail
    python之数据驱动yaml操作
    python之数据驱动ddt操作(方法四)
  • 原文地址:https://www.cnblogs.com/randomstring/p/15707292.html
Copyright © 2011-2022 走看看