讲义1-八大排序算法.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
讲义1-八大排序算法

八大排序算法 1 概述 1)排序的定义: 输入:n 个数:a1,a2,a3,...,an 输出:n 个数的排列:a1,a2,a3,...,an,使得a1=a2=a3=...=an 。 2 )排序的分类 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外 部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要 访问外存。我们这里说说八大排序就是内部排序。 当n 较大,则应采用时间复杂度为 O(nlog2n) 的排序方法:快速排序、堆排 序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的 关键字是随机分布时,快速排序的平均时间最短。 3 )稳定性说明 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排 序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri 在rj 之前,而在 排序后的序列中,ri 仍在rj 之前,则称这种排序算法是稳定的;否则称为不稳定 的。 堆排序、快速排序、希尔排序、直接选择排序不是稳定的排序算法,而基数 排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前 2 个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在 简单形式化一下,如果Ai = Aj, Ai 原来在位置前,排序后Ai 还是要在Aj 位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序, 然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数 排序就 是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高 位也相同时是不会改变的。 回到主题,现在分析一下常见的排序算法的稳定性,每个都给出简单的理由。 (1) 冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个 元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是 不会再无 聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使 通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后 顺序并没有改 变,所以冒泡排序是一种稳定排序算法。 (2)选择排序 选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的, 在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1 个元素,第 n 个 元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择, 如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素 后面,那么 交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我 们知道第一遍选择第1 个元素5 会和2 交换,那么原序列中2 个5 的相对前后顺 序就被破坏了,所以选择排序不是一个稳定的排序算法。 (3)插入排序 插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然, 刚开始这个有序的小序列只有1 个元素,就是第一个元素。比较是从有序序列的 末尾开 始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大 则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个 和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面。所以, 相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序, 所以插入排序是稳 定的。 (4)快速排序 快速排序有两个方向,左边的i 下标一直往右走,当a[i] = a[center_index], 其中center_index 是中枢元素的数组下标,一般取为数组第0 个元素。而右边的 j 下标一直往左走,当a[j] a[center_index] 。如果i 和j 都走不动了,i = j, 交换 a[i]和a[j],重复上面的过程,直到ij。交换a[j]和a[center_index],完成一趟快速 排序。在中枢元素和a[j]交换的时候,很有可能把前面的元素的稳定性打乱,比 如序列为 5 3 3 4 3 8 9 10 11, 现在中枢元素5 和3(第5 个元素,下标从1 开始 计)交换就会把元素 3 的稳定性打乱,所以快速排序是一个不稳定的排序算法,

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档