各种排序整理详解

11.04
1.马上就要期中考了,现在什么也没复习,慌成dog
2.从语文老师口中知道,班主任一直很关心我的学科成绩(特别是Chinese,非常感动(≧▽≦)/啦啦啦)

11.16
1.换了新同桌,卡星
2.跟新同桌说奖励他一个大笔豆子,他欣然答应,最后一下“啪”的清脆和红红的脸,就不必我多说了
3.跟同学讨论—— ——在人死之前打了别人一下是不是血赚

11.23
1.自认为自己的性格不太好,喜欢讲话,之后要改
2.遇到一个豪华绿钻的QQ音乐用户,就用他/她的账号把自己的歌单下完了

11.28
1.最近发现了一个新game,哎了哎了

让我们进入今天的正题

目录

\(冒泡排序(Bubble Sort)\)

\(插入排序(Insertion Sort)\)

\(希尔排序(Shell Sort)\)

\(选择排序(Selection Sort)\)

\(快速排序(Quick Sort)\)

\(归并排序(Merge Sort)\)

\(堆排序(Heap Sort)\)

\(计数排序(Counting Sort)\)

\(桶排序(Bucket Sort)\)

\(基数排序(Radix Sort)\)

一.冒泡排序

冒泡排序是一种交换排序,核心是冒泡,把数组中最小的那个往上冒,冒的过程就是和他相邻的元素交换。

重复走访要排序的数列,通过两两比较相邻记录的排序码。
比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

性能分析

稳定性:稳定
平均时间复杂度:\(O(N^2)\)
***时间复杂度:\(O(N)\)
最差时间复杂度:\(O(N^2)\)

模拟过程

各种排序整理详解

二.插入排序

插入排序操作类似于摸牌并将其从大到小排列。每次摸到一张牌后,根据其点数插入到确切位置。

① 从第一个元素开始,该元素可以认为已经被排序
② 取出下一个元素,在已经排序的元素序列中从后向前扫描
③如果该元素(已排序)大于新元素,将该元素移到下一位置
④ 重复步骤③,直到找到已排序的元素小于或者等于新元素的位置
⑤将新元素插入到该位置后
⑥ 重复步骤②~⑤

性能分析

稳定性:稳定
最差时间复杂度:\(O(N^2)\)
平均时间复杂度:\(O(N^2)\)

模拟过程

各种排序整理详解

三.希尔排序

希尔排序的实质就是分组插入排序,该方法又称递减增量排序算法,因Donald Shell(希尔)于1959年提出而得名。希尔排序是非稳定的排序算法。

① 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。
② 所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序。
③ 取第二个增量d2小于d1重复上述的分组和排序,直至所取的增量dt=1(dt小于dt-l小于…小于d2小于d1),即所有记录放在同一组中进行直接插入排序为止。

性能分析

稳定性:不稳定
最差时间复杂度:\(O(N^2)\)
平均时间复杂度:\(O(Nlog_2N)\)

模拟过程

假设有一组{9, 1, 2, 5, 7, 4, 8, 6, 3, 5}无需序列。

各种排序整理详解

第一趟排序: 设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。接下来,按照直接插入排序的方法对每个组进行排序。
第二趟排序:
将上次的 gap 缩小一半,即 gap2 = gap1 / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为2组。按照直接插入排序的方法对每个组进行排序。
第三趟排序:
再次把 gap 缩小一半,即gap3 = gap2 / 2 = 1。 这样相隔距离为1的元素组成一组,即只有一组。按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。

四.选择排序

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgxjzf.html