• 八大排序算法


    引言

      自己理解,闭卷纯手打。

    插入排序

      直接插入排序

          稳定性:稳定

          时间复杂度:O(n)  最好情况:O(n)  最坏情况:O(n2)

          将一个记录插入到一个已排好序的数列中,重复执行,直至结束。

      希尔排序    

          稳定性:不稳定

          时间复杂度:O(n1.3)  最好情况:O(n)  最坏情况:O(n2)

          按一定的间隔进行排序,重复运行,直至结束,每次运行的间隔逐渐缩小,直至为1。常见间隔队列取

          {n/2,n/4,n/8,...1},也可取奇偶数,取法随意。

    选择排序

      简单选择排序    

          稳定性:不稳定

          时间复杂度:O(n2)  最好情况:O(n2)  最坏情况:O(n2)

          每次选择最小的数,存放到结果集里,第二遍从剩下的数里在选择最小的存放到结果集里,依次重复。

          优化:可以每次同时选择最小的和最大的数,存放到结果集里,依次重复。

      堆排序

          稳定性:不稳定

          时间复杂度:O(nlog2n)  最好情况:O(nlog2n)  最坏情况:O(nlog2n)

          堆排序运用到二叉树的知识。所建的树必须同时满足ai<a2i和ai<a(2i+1),或者是均大于,及根节点必须

          全部小于或大于其两个子节点。

          堆顶即为最小值或最大值,取堆顶数,剩下的数重新进行建堆,然后接着取堆顶数,重复执行。

          两大关键点:

            如何建堆;取堆顶数后如何重新建堆。

    交换排序

      冒泡排序

          稳定性:稳定

          时间复杂度:O(n2)  最好情况:O(n)  最坏情况:O(n2)

          相邻的两个数相互比较,前者比后者大,后者放前面否则位置不变,第一遍的结果则得到,较小的

          放在最前面(以增序为例)

          第二轮,同理,继续比较相邻的两个数,结果则是第二小的数放第二位,重复执行。

      快速排序

          稳定性:不稳定

          时间复杂度:O(nlog2n)  最好情况:O(nlog2n)  最坏情况:O(n2)

          从无序的数列选择一个数,一般为第一个,将其它数与它比较,比它小的放前面,大的放后面,这样

          就分成了两个小的无序数列,而选择的数则是在它排好序后所应当在的位置。

          将第一次分割的每个无序小数列按照相同的方法分割,取每个小数列的第一个,再将其分为两个...

          重复执行。

    归并排序

          稳定性:稳定

          时间复杂度:O(nlog2n)  最好情况:O(nlog2n)  最坏情况:O(nlog2n)

          将一个无序数列分为多个小的数列,比如只有2个元素的有序数列,共有n/2个,将这些小的有序数列

          两两合并,成为新的数列,并将新的数列进行排序,共有n/4个有序数列。

          再次合并,重复进行操作。

    基数排序

          稳定性:稳定

          时间复杂度:O(d(n+radix))  (待排序列为n个记录,d个关键码,关键码的取值范围为radix)

          一个有序的数列比如{12,15,25,26,31},发现在相同的位下,如个位,12<15即比较个位2<5...

          大小清晰可辨,十位,百位...同理。现在将个位数相同的数放在一起,再从个位数为0的数列开始,依

          次将这些数列串到一起,直到个位数为9。再将十位相同的数放在一起,同理,再从十位数为0的数列开

          始,依次将这些数列串到一起,直到个位数为9。重复执行。按照位数高低优先度的标准分为最低位优先

          (Least Significant Digit first)法和最高位优先(Most Significant Digit first)法上面是由个位向高位,即为

          最低位优先(Least Significant Digit first)法。

  • 相关阅读:
    【转载】消息队列使用的四种场景介绍
    Vue项目部署打包
    创建Vue项目vue-cli &#183; Failed to download repo vuejs-templates/webpack: connect ETIMEDOUT
    数据库错误:ORA-12154
    oracle数据库一条sql语句批量插入数据
    Linux time scap
    winscp不能使用root登录
    Linux find ./ -name *.bak | xargs rm -rf
    Linux命令echo 3 > /proc/sys/vm/drop_caches
    redis查看服务器占用端口
  • 原文地址:https://www.cnblogs.com/yonyong/p/9544664.html
Copyright © 2020-2023  润新知