排序算法的比较、选择及其改进.pdfVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

排序算法的比较、选择及其改进

[摘要]排序是计算机科学中最重要的研究问题之一。在对常用的几种排序算

法进行了综合比较的基础上,本文提出了在实际应用中如何选择排序算法的一般

原则,同时也给出了一些算法的改进策略及其C语言实现。

[关键词]排序改进比较选择算法

一、引言

排序是计算机科学中最重要的研究问题之一,它在计算机图形、计算机辅助

设计、机器人、模式识别及统计学等领域具有广泛的应用。由于它固有的理论上

的重要性,2000年它被列为对科学和工程计算的研究与实践影响最大的10大问

题之一。其功能是将一个数据元素的任意序列重新排列成一个按关键字有序的序

列。

二、排序算法的性能比较

内部排序算法种类繁多,但就其排序时所遵循的原则而言,大致可分为五大

类:插入排序、交换排序、选择排序、归并排序和基数排序。算法性能的比较主

要是从时间复杂度、空间复杂度和稳定性三个方面来综合考虑。

(一)时间复杂度

从平均性能上看,直接插入排序、简单选择排序、冒泡排序这三种“简单排

序”为第一类,其时间复杂度均为O(n2);堆排序、归并排序、快速排序属于第

二类,其时间复杂度均为O(nlog2n);基数排序则属于第三类,其时间复杂度

为O(d(n+rd)),也可以写为O(dn),因此最适用于n值很大而关键字较小的

序列。

当原表有序或基本有序时,直接插入排序和冒泡排序将大大减少比较次数和

移动记录的次数,时间复杂度可降至O(n);而快速排序则相反,当原表基本有

序时,将蜕化为冒泡排序,时间复杂度提高为O(n2);原表是否有序,对简单

选择排序、堆排序、归并排序和基数排序的时间复杂度影响不大。

(二)空间复杂度

从空间复杂度来看,归并排序最大,对n个记录需要附加等量的存储量,

其空间复杂度为O(n);基数排序次之,它需要附加较多存储空间用于存储队列

指针和用作结点指针域,空间复杂度为O(rd);快速排序单独讨论,其递归算

法需要使用堆栈来实现,栈中存放待排序记录序列的首尾位置,在一般情况下需

要栈空间O(nlog2n),最坏情况下,所需要的栈空间为O(n);其余排序算法

的空间复杂度最小,仅为O(1)。

(三)稳定性

从算法的稳定性而言,所有排序算法可分为两类:直接插入排序、简单选择

排序、冒泡排序、归并排序和基数排序为第一类,均属于稳定的算法,而快速排

序和堆排序则属于第二类,是不稳定算法。

三、排序算法的选择

根据以上的性能比较,我们发现每种排序算法都各有优缺点。因此,在实用

时需根据不同情况适当选用,甚至可以将多种方法结合起来使用。

(一)选择排序算法的依据

影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的。相

反,有时平均时间复杂度高的算法可能更适合某些特殊情况。同时,选择算法时

还得考虑它的可读性,以利于软件的维护。一般而言,需要考虑的因素有以下四

点:

1.待排序的记录数目n的大小;

2.记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小;

3.关键字的结构及其分布情况;

4.对排序稳定性的要求。

(二)选择排序算法的结论

依据上述在选择排序算法时需考虑的因素,可以得出以下几个结论:

1.数据量不大时选用插入或选择排序,一般不使用或不直接使用传统的冒

泡排序;

2.当数据量大而又注重空间复杂性时选择快速排序或堆排序等;

3.在已排序数据上增加若干新数据时,建议使用插入排序;

4.当数据量大而又允许使用较多附加空间时可选择桶排序。

四、一些排序算法的改进策略

常用的排序算法中,有不少是可以根据实际情况而进一步改进完善的,以充

分提高算法的效率。

(一)简单选择排序的改进二元选择排序

传统的简单选择排序,每趟循环只能确定一个元素排序后的定位。我们可以

考虑改进为每趟循环确定两个元素(当前趟最大和最小记录)的位置,从

文档评论(0)

182****9617 + 关注
实名认证
文档贡献者

小学毕业

1亿VIP精品文档

相关文档