2022年程序设计中的排序及优化 .pdf
《2022年程序设计中的排序及优化 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计中的排序及优化 .pdf(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、收稿日期: 2006 - 09 - 04作者简介:杜恒(1976 - ) ,男,河南郑州人,河南工业职业技术学院教师。程序设计中的排序及优化杜恒,李怀刚,陈平(河南工业职业技术学院,河南南阳 473009)摘 要:排序是程序设计中很重要的一种操作,很多软件中都有排序的功能。而排序又是影响程序运行效率的重要因素,排序模块设计的好坏,直接影响到整个程序的性能。本文对常用的三种排序方法的实现以及如何优化进行深入的探讨。关键词:程序设计;排序;运行效率中图分类号:TP311111文献标识码: B文章编号: 1009 - 9522 (2007)02 - 0021 - 030 排序方法简介所谓排序就是将杂
2、乱无章的数据元素通过一定的方法按某种关键字进行从大到小或者从小到大进行排列的过程。排序是程序设计中一种常用而又非常重要的操作,在多数软件中都有体现,也是程序员在进行程序设计时常常要考虑的算法,但是多数程序员在实现排序的时候,往往只进行排序,而忽略了优化,致使设计出的程序运行速度非常慢,效率非常低。尽管说影响程序运行效率是多方面的,但是优化排序是提高程序运行效率的主要手段之一,所以必须要重视。排序的方法非常多,分为几个大类,如交换类、选择类 、插入类以及链式基数排序等。相应的又有几十种,如冒泡排序 、快速排序 、选择排序 、堆排序 、插入排序 、希尔排序等,在此我们主要讨论常用的三种排序,即冒泡
3、,选择及简单插入排序,并对这些排序算法进行优化。1 冒泡排序及优化111 冒泡排序的基本原理冒泡排序,又叫做起泡排序,其排序的规则是相邻的两个数进行两两比较,符合交换条件的进行互换,直到该轮的结束 。由于在排序过程中,某些数往前面排,而某些数排序时往后面去,而且一次移动个位置,往前面排的数好象水中的气泡在慢慢上升一样,所以我们把此种方法称为冒泡排序(本文所有排序均按从大到小排序)。112 冒泡排序的C语言实现算法由冒泡排序的基本原理及排序过程,我们用C语言编写冒泡排序的实现算法。void bubblesort (int a,int n)inti ,j ,t ;for (i = 0;i n -
4、1 ;i + +)for (j = 0 ;j n - 1 - i ;j + + )if (aj aj + 1 )/3 如果前面的数比后面的小,进行交换,将大数调在前面3/t = aj ;aj = aj + 1 ;aj + 1 = t ;此算法,是最基本的算法,按照排序的过程进行编写的 。从算法上来看,相邻两个数进行比较,如果前面的数比后面的数要小,就要进行比较和交换;否则的话,仅进行一次比较而不进行交换。而我们知道不管是进行比较的关系运算还是赋值运算,都要占用系统的执行时间,影响程序的执行效率 。如果在某一轮排序后,或者原序列已经有序,程序中所有的比较运算已不必进行了,而上述算法显然没有考虑这
5、一点 。我们现在对上面算法进行优化,设置一个标志,放在交换的语句序列中,如果执行到交换的代码,该标志即被修改,这样我们就可以判断此时正在进行排序;如果该部分代码不被执行,那么标志就不被修改,说明已经排序成功,下一轮就没有必要再进行排序了。我们利用这个标志来控制我们的算法的进行,这就是优化的算法。113冒泡排序的优化优化的算法如下:voidoptbubblesort(int a ,int n)12200712九 江 职 业 技 术 学 院 学 报(杜恒 : 程序设计中的排序及优化)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名
6、师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - intI ,j ,t ,swap = 0 ;/3swap是用来判断是否排序好序的标志 3/for (i = 0 ;i n - 1 & & ! swap;i + + ) 3/当swap = 1时,取反为0 ,则退出循环3/swap = 1;for (j = 0;j n - 1 - i ;j + + )if (aj aj + 1 )t = aj ;aj = aj + 1 ;aJ + 1 = t ;swap = O ;/3swap为0 ,表示排序正在进行3/经过优化以后,我们可以看出,如果某一轮(比如
7、说在第i轮) ,执行完以后已经排好序了,那么下一轮(即i + 1轮)再进行一轮的判断,但是所有交换代码已不用被执行了,从而swap也不被执行,这样swap的值为1 ,那么在下一轮对swap的值进行取反为0 ,就可以退出循环了,从而有效的减少了无效的执行次数。这种优化的结果,如果对于待排元素比较少的序列,可能对算法执行效率的影响不是太大,如果待排元素个数有时是几百万甚至上亿的时候,效率的提高是很可观的。2 选择排序及其优化选择排序也是常用的排序方法之一,因为其排序过程简单实用,为众多的编程人员所喜欢,但是往往忽略进行优化 。211 选择排序的基本思想选择排序的基本思想是先从第一个位置起,依次和后
8、面的n - 1个数进行比较,找到一个最大值放在该位置,然后从第二个位置起,依次和后面的数进行比较,找到一个次大值放于第二个位置上,依此类推, n - 1轮以后即排序成功。此过程的进行,好像是在众多的待排元素选出一个符合条件的数放在该放的位置上,所以叫做选择排序。212 选择排序的C语言实现算法由选择排序的基本原理和图2中的排序过程,我们可以编写选择排序的一般算法如下。void selsort (int a ,int n)“int i ,j ,t ;/3t是用来作为中间交换变量3/for (i = 0 ;i n - 1 ;i + + )for (j = i + 1 ;j n;j + + )if
9、(ai aj )t = ai ;ai = aj ;aj = t ;此算法也是严格按照选择排序的过程来进行编写的,从这个算法,我们明显看出一个问题,就是在找某个位置上应该放置的数时,在没有真正找到该数前,有很多数要在此位置上占用一次,这就等于进行三次交换(算法中交换部分代码为三个赋值语句) ,所以我们可以看出,很多是没有必要的交换在这个算法里也进行了,这样肯定要影响程序的执行效率 。所以在排序过程中,我们要把这些无效的操作给去掉,比如找第一个位置上的数,如果比较过程中后面的数比该位置上的数大,先把这个数的位置记录下来,继续往后找;如果遇到比刚才记录的位置的数还要大,那么再记录该位置,一直找到最后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年程序设计中的排序及优化 2022 程序设计 中的 排序 优化
限制150内