July_algorithm 6.排序查找.pdf
《July_algorithm 6.排序查找.pdf》由会员分享,可在线阅读,更多相关《July_algorithm 6.排序查找.pdf(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、排序查找七月算法邹博2015年11月1日10月算法在线班2/68主要内容与目标 排序 找到一个O(NlogN)的排序算法 插入排序、选择排序、希尔排序、冒泡排序 堆排序及其思考 快速排序及其思考 非比较方案的排序:记数排序、桶排序、基数排序 总结与思考 排序的目的是什么?10月算法在线班3/68排序问题的提法 给定n个元素的集合A,按照某种方法将A中的元素按非降或非增次序排列。分类:内排序,外排序 常见内排序方法 插入排序/希尔排序 选择排序/锦标赛排序/堆排序 冒泡排序/快速排序 归并排序 基数排序10月算法在线班4/68插入排序/将A(1:n)中的元素按非降次序分类,n1 procedur
2、e INSERTIONSORT(A,n)A(0)-/设置初始边界值for j2 to n do/A(1:j-1)已分类itemA(j);ij-1while itemA(i)do/0ijA(i+1)A(i);ii-1repeatA(i+1)item;repeat end INSERTIONSORT 10月算法在线班5/68锦标赛排序10月算法在线班6/68锦标赛排序10月算法在线班7/68归并排序 基本设计思想:将原始数组A0n-1中的元素分成两个子数组:A10,n/2和A2n/2+1,n-1。分别对这两个子数组单独排序,然后将已排序的两个子数组归并成一个含有n个元素的有序数组。10月算法在线班
3、8/68Code10月算法在线班9/68归并排序的时间复杂度性能分析算法的递推关系:,c为常数若,则有:若2kn2k+1,则T(2k)T(n)4-3-2-5-2和x=3,返回1-2-2-4-3-5。10月算法在线班38/68问题分析 分别申请两个指针p1和p2,小于x的添加到p1中,大于等于x的添加到p2中;最后,将p2链接到p1的末端即可。时间复杂度是O(N),空间复杂度为O(1);该问题其实说明:快速排序对于单链表存储结构仍然适用。注:不是所有排序都方便使用链表存储,如堆排序,将不断的查找数组的n/2和n的位置,用链表做存储结构会不太方便。10月算法在线班39/68Code10月算法在线班
4、40/68快速排序Code10月算法在线班41/68快速排序与归并排序的联系 都是分治的思想;经过一次划分后,实现了对A的调整:其中一个子集合的所有元素均小于等于另外一个子集合的所有元素;按同样的策略对两个子集合进行分类处理。当子集合分类完毕后,整个集合的分类也完成了。这一过程避免了子集合的归并操作。10月算法在线班42/68快速排序的性能分析 在最好的情况,每次运行一次分区,我们会把一个数列分为两个几近相等的片段。然后,递归调用两个一半大小的数列。一次分区中,i、j一共遍历了n个数,即O(n)记:快速排序的时间复杂度为T(n),有,T(n)=2*T(n/2)+cnc是某常数 T(n)=O(n
5、*logn)10月算法在线班43/68快速排序的性能分析 在最坏的情况下,两个子数组的长度为 1 和n-1 T(n)=T(1)+T(n-1)+cn 演示:计算得到T(n)=O(n2)思考:如果每次分区,都把数组分成1%和99%的两个子数组,时间复杂度是多少?10月算法在线班44/68附:根据前序中序,计算后序 前序遍历:GDAFEMHZ 中序遍历:ADEFGHMZ 根据前序遍历的特点得知,根结点为G;根结点将中序遍历结果ADEFGHMZ分成ADEF和HMZ两个左子树、右子树。递归确定中序遍历序列ADEF和前序遍历序列DAEF的子树结构;递归确定中序遍历序列HMZ和前序遍历序列MHZ的子树结构;
6、10月算法在线班45/68Code问:时间复杂度是多少?10月算法在线班46/68Heap VS Quick 快速排序的最直接竞争者是堆排序。堆排序通常比快速排序稍微慢,但是最坏情况的运行时间总是O(n log n)。快速排序是经常比较快,但仍然有最坏情况性能的机会。堆排序拥有重要的特点:仅使用固定额外的空间,即堆排序是原地排序,而快速排序需要O(log n)的空间。10月算法在线班47/68快速排序为什么这么快?乱数快速排序有一个值得注意的特性,在任意输入数据的状况下,它只需要O(n log n)的期望时间。是什么让随机的基准变成一个好的选择?假设我们排序一个数列,然后把它分为四个部份。在中
7、央的两个部份将会包含最好的基准值;他们的每一个至少都会比25%的元素大,且至少比25%的元素小。如果我们可以一致地从这两个中央的部份选出一个元素,在到达大小为1的数列前,我们可能最多仅需要把数列分区2log2n次,产生一个 O(nlogn)算法。不幸地,乱数选择只有一半的时间会从中间的部份选择。出人意外的事实是这样就已经足够好了。想像你正在投掷一枚硬币,直到有 k 次国徽朝上。尽管这需要很长的时间,平均来说只需要 2k 次投掷。且在 100k 次投掷中得不到 k 次国徽朝上的概率,是像天文数字一样的非常小注。借由同样的论证,快速排序的递归平均只要2(2log2n)的调用深度就会终止。注:该概率
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- July_algorithm 6.排序查找 排序 查找
限制150内