赞
踩
基本思想:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置,将位置后的已排序数据逐步向后挪位,将新元素插入到该位置。
基本思想:折半插入排序将比较和移动这两个操作分离出来,也就是先利用折半查找找到插入的位置,然后一次性移动元素,再插入该元素。
基本思想:希尔排序本质上还是插入排序,只不过是把待排序序列分成几个子序列,再分别对这几个子序列进行直接插入排序。
基本思想:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们,直到序列比较完。我们称它为一趟冒泡,结果将最小的元素交换到待排序列的第一个位置。下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序列减少一个元素,每趟冒泡的结果把序列中的最小元素放到了序列的最终位置,……,这样最多做n-1趟冒泡就能把所有元素排好序。
快速排序是一种基于分治法(Divide-and-Conquer)的排序方法。
基本思想:选择任一个元素作为枢轴(pivot)(通常选第一个元素),将序列中比枢轴小的元素都移到枢轴前边,比枢轴大的元素都移到枢轴后边。
那么在“分块”时是如何操作呢?以从小到大排序为例
基本思想:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
注:选择排序,元素比较次数与序列初始状态无关,始终是 n ( n − 1 ) 2 \frac{n(n-1)}2 2n(n−1)
什么是堆?
什么是堆排序?
事例过程如下图:
基本思想:也是采用分治策略。假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为1,然后两两归并,得到 ⌈n/2⌉个长度为2或1的有序表;再两两归并,……如此重复,直到合并成一个长度为n的有序表为止,这种排序方法称为2-路归并排序。
例如:49 38 65 97 76 13 27
基数排序又称为“桶子法”,从低位开始将待排序的数按照这一位的值放到相应的编号为0~9的桶中。等到低位排完得到一个子序列,再将这个序列按照次低位的大小进入相应的桶中,一直排到最高位为止,数组排序完成。基数排序又分为最高位优先(MSD)排序和最低位优先(LSD)排序。
例子:53, 3, 542, 748, 14, 214, 154, 63, 616
补充位数:053, 003, 542, 748, 014, 214, 154, 063, 616
桶实际是一个队列,先进先出(从桶的上面进,下面出)
关键字数量为n,关键字的位数为d,比如748 d=3,r为关键字的基的个数,就是组成关键字的数据的种类,比如十进制数字一共有0至9一共10个数字,即r=10
空间复杂度:需要辅助存储空间r个队列,所以空间复杂度为O( r )
时间复杂度:需要进行关键字位数d次"分配"和"收集",一次"分配"需要将n个关键字放进各个队列中,一次"收集"需要将r个桶都收集一遍。所以一次"分配"和一次"收集"时间复杂度为O(n+r)。d次就需要O(d(n+r))的时间复杂度。
稳定性:由于是队列,先进先出的性质,所以在分配的时候是按照先后顺序分配,也就是稳定的,所以收集的时候也是保持稳定的。即基数排序是稳定的排序算法。
排序 | 比较次数 | 移动次数 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 |
---|---|---|---|---|---|---|
直接插入 | n2/4 | n2/4 | O(n) | O(n2) | O(n2) | O(1) |
折半 | O(n2) | |||||
希尔 | O(n2) | O(n1.3) | O(1) | |||
冒泡 | n(n-1)/2 | 3n(n-1)/2 | O(n) | O(n2) | O(n2) | O(1) |
快速 | O(nlog2n) | O(n2) | O(nlog2n) | O(log2n)~O(n) | ||
简单选择 | n(n-1)/2 | ≤3(n-1) | O(n2) | O(n2) | O(n2) | O(1) |
堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | ||
归并 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | ||
基数 | O(d(n+r)) | O(r) |
稳 定 性 { 稳 定 插 入 排 序 、 冒 泡 排 序 、 归 并 排 序 和 基 数 排 序 不 稳 定 简 单 选 择 排 序 、 快 速 排 序 、 希 尔 排 序 和 堆 排 序 稳定性\left\{ 稳定插入排序、冒泡排序、归并排序和基数排序不稳定简单选择排序、快速排序、希尔排序和堆排序 \right. 稳定性⎩⎨⎧稳定不稳定插入排序、冒泡排序、归并排序和基数排序简单选择排序、快速排序、希尔排序和堆排序
需要将待排序的记录存储在外存上,排序时再把数据一部分一部分的调入内存进行排序。在排序过程中需要多次进行内存和外存之间的交换,对外存文件中的记录进行排序后的结果仍然被放到原有文件中。
考研tips:
能够手动模拟各个排序算法的过程,根据要求选择合适排序算法
掌握排序算法思想,特征(初态的影响、时空复杂度、稳定性、适用性)
参考博客:
小狼的相关博文:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。