选择排序算法的改进与应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择排序算法的改进与应用
黄逸
【摘要】选择排序是内部排序算法中的一种,在每一轮目标元素(最大值或最小值)
的确定过程中,有关的比较运算结果并没有得到很好的利用.针对上述问题,文章提出了一种改进的选择排序算法,新算法利用临时数组储存比较运算中的有价值信息,在
此基础上,提前完成有关的元素交换.实验表明,改进的选择排序算法计算效能有了一定的提升.
【期刊名称】《无线互联科技》
【年(卷),期】2018(015)023
【总页数】3页(P90-92)
【关键词】选择排序;内部排序;数组
【作者】黄逸
【作者单位】南海中学,广东佛山 528211
【正文语种】中文
排序就是将一个数据元素集合或序列重新排列成一个按某项值有序的序列,通常是按照某种规则把数据的顺序重新整理,排序在计算机的信息处理过程中有着极为重要的应用。
一般地说,根据待排序元素能否一次性地在内存中完成所有的排序任务,可以把排序算法分为内部排序和外部排序。
内部排序无需对外存进行访问,根据不同的原则对内部排序进行分类,大致可分为插入排序、交换排序、选择排序、归并
排序和计数排序共五大类[1]。
为了改善现有的选择排序算法的计算效能,设计实
现了一种改进的选择排序算法,理论分析和实验过程均表明了改进算法的正确性和有效性。
1 改进的选择排序算法的设计与实现
1.1 选择排序算法的效率分析
与冒泡排序一样,选择排序的核心工作也是元素之间的比较和交换。
冒泡排序与选择排序的元素比较次数是相同的,但由于选择排序的元素交换次数比冒泡排序少,所以选择排序的执行效率更为高效[2]。
利用C语言描述选择排序算法(从大至小)的程序代码如下:如上述程序所示,
选择排序算法的工作原理是:第一轮从所有N个数中选出最大的数,即先将a[0]
与后面的各个元素a[j]进行比较,凡是遇到比a[0]大的数就记下它的位置j,经过
一轮比较(共N-1次)后,最大的数就能被挑选出来,最后可将它与a[0]交换位置。
于是,经过第一轮的比较之后,最大数就存放在a[0]中;第二轮从余下的N
-1个数中选出最大的数存放在a[1]中,即将a[1]与后面的各个元素a[j]进行比较,凡是遇到比a[1]大的数就记下它的位置j,经过这一轮比较(共N-2次)后,次
大的数就能被挑选出来,将它与a[1]进行交换;以此类推,到N-1轮时,可把所剩余两个数中的较大数存放在a[N-2]、而较小数则存放在a[N-1]中。
下面结合某一序列的排序过程,说明选择排序算法所存在的效率问题。
如表1所示,待排
序序列的元素共有10个,因此,第一轮需进行9次比较,而记录最大数位置的j
变量共发生了3次变更,最终的结果是完成了a[0]与a[8]的数据交换操作。
根据
选择排序算法的工作原理可以得知:除了完成最终的数据交换操作之外,一些有价值的比较信息(如记录最大数位置的变更信息“j=0→j=1”和“j=1→j=4”)却
被丢弃掉。
1.2 选择排序算法的改进设计
如前所述,对某一排序任务而言,冒泡排序与选择排序所执行的比较运算次数是相同的,但由于在排序过程中后者对元素的交换次数远小于前者,故选择排序具有更高的效率。
受这一思想的启发,可以利用各轮次已掌握的最大数位置变更信息对有关的元素进行交换,以便提前完成各元素的数据交换[3]。
仍然以表1的第一轮排序任务为例,首先利用临时数组储存有关最大数发生变更的位置信息(如
j={1,4}),在完成a[0]=a[8]old的基础上,依次地对发生位置变更的元素进行相应的元素交换,即a[1]=a[4]old、a[4]=a[1]old。
依照上述改进思路对表1的排序任务重新排序,得到如表2所示的结果。
对比表1和表2,不难发现,改进的选择排序算法在第一轮次中便完成了a[1]元素的排序。
由于改进的选择排序算法能提前完成各元素的数据交换,于是为提前结束轮次排序提供了可能。
表1 选择排序算法的运行实例a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]待排序元素 3 15 6 2 19 8 12 7 20 4j值(j=0)(j=0)↓(j=1)(j=1) (j=1)(j=4) (j=4)
(j=4)(j=8)置最大数位置j为8排序结果 20 15 6 2 19 8 12 7 3 4第一轮第一轮(j=1)↓(j=4)(j=4)↓(j=8)操作说明置最大数位置j为1置最大数位置j为4
表2 改进选择排序算法的运行实例a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]待排序元素 3 15 6 2 19 8 12 7 20 4第一轮操作说明 a[0]=a[8]old
a[8]=a[0]old排序结果 20 19 6 2 15 8 12 7 3 4 a[1]=a[4]old a[4]=a[1]old
利用C语言描述改进的选择排序算法(从大至小)的程序代码如下:
for(q=0;q<int(p/2);q++) /*对发生位置变更的元素进行相邻的两两交换*/
2 并行排序的实验及分析
实验的硬件环境是:Intel core i5-6600K四核CPU、DDR4 2133 MHz 16 GB RAM、金士顿SUV400S37/240G固态硬盘;软件环境为:Windows 7专业版64位、Microsoft visual studio 2015 C++;实验中需要进行对比的算法有冒泡排序算法、选择排序算法和改进的选择排序算法。
实验过程中,用rand()函数随机产生一个长度为100的实数序列,然后分别用上述3种算法对该序列中的元素进行排序;实验重复1 000次,取平均计算耗时作为度量各种算法的效能。
具体的实验结果如图1所示。
图1 各种排序算法的计算耗时情况
从图1可以发现,冒泡排序算法所需的计算耗时最多、选择排序算法次之,而改进的选择排序算法为最小。
事实上,由于改进的选择排序算法充分利用了各轮次的既有比较信息,为提前结束选择排序提供了条件,因而较选择排序算法而言,减少了近22.53%计算耗时的开销。
3 结语
排序算法在信息处理的过程中有着重要的地位,一些经典的排序算法存在结构简单和易于使用的优点,但在执行效率上仍然需要改进。
以选择排序算法为例,通过对各轮次的记录最大数位置的变更信息进行处理,设计实现了一种改进的选择排序算法,实验验证了改进算法的正确性和有效性。
[参考文献]
【相关文献】
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2007.
[2]谭浩强.C语言程序设计[M].4版.北京:清华大学出版社,2010.
[3]彭军,向毅.数据结构与算法[M].北京:人民邮电出版社,2013.。