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的元素组成一组,即只有一组。按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。