八大排序算法

会有一股神秘感。 提交于 2021-02-13 11:53:13

引言

  自己理解,闭卷纯手打。

插入排序

  直接插入排序

      稳定性:稳定

      时间复杂度: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)法。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!