欢迎来到天天文库
浏览记录
ID:46283629
大小:71.50 KB
页数:7页
时间:2019-11-22
《C程序设计中关于排序探析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C++程序设计中关于排序探析摘要:排序就是在计算机中对不规则数据进行升序或降序排列实现的方法;排序算法有冒泡排序、选择排序和插入排序等,各种算法的实现其复杂度都不一样,复杂度的大小体现了算法的优劣。关键词:冒泡排序;选择排序;插入排序中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)31-7504-04排序(Sorting)是C++程序设计中基本并且常用的算法,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。本文将讨论三种排序算法的实现,并对三种排序算
2、法进行比较分析。1排序的分类1.1按是否涉及数据的内、外存交换分为[1]:1)内部排序:内部排序(简称内排序),是带排序纪录存放在计算机内存中进行的排序过程。2)外部排序:外部排序(简称外排序),是带排序纪录的数量很大,以至于内存一次不能容纳全部纪录,在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序的排序方法。1.2按策略划分内部排序可分为1)插入排序,包括:直接插入排序,其它插入排序,希尔排序;2)快速排序,包括:冒泡排序,快速排序;3)选择排序,包括:简单选择排序,树形选择排序,堆排
3、序;4)归并排序;5)基数排序,包括:多关键字的排序,链式基数排序。2排序的实现由于排序有很多种方法,本文主要讨论内部排序的几种实现。2.1冒泡排序算法实现思想:将被排序的数组R[l...n]垂直排列,即将元素R[l]到R[n]排列垂直如气泡状,约定数据小的为轻气泡,大的为重气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”飘浮[2]”o如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止(图1)。2.2简单选择排序算法实现思想:对于一组数据{KI,K
4、2,…,Kn},首先从KI,K2,…,Kn中选择最小值,假如它是Kz,则将Kz与K1对换,然后从K2,K3,Kn中选择最小值Kz,再将Kz与K2对换.如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,一个由小到大的有序序列就这样形成.即:在要排序的一组数中,选出最小的一个数与第一个位置的数交换,然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止(图2)。直接插入排序(StraightIns
5、ertionSort)是一种最简单的排序方法,它的基本思想是将任一数插入到已排好序的数据序列中并保持序列的排序。如果数组a[n]中存放的数据序列是升序,当插入的数num比已有序列最后一个数大,则将插入到序列的末尾;如果插入的数num不比序列最后一个数大,则将它依次与a[0]〜a[n-l]进行比较,直到出现a[i]>=num为止,这时表示a[0]〜a[iT]各元素的值比num小,这时将a[i]〜a[n-l]各元素向后移一人位置,把a[i]空出,最后将num放在a[i]中,最终完成插入排序。程序设计如下:3排序算
6、法的分析2.1排序算法比较3.1.1简单选择排序1)关键字比较次数无论文件初始状态如何,在第i趟排序选出最小关键字的记录,需做n-i次比较,因此总的比较次数为:n(n-1)/2=0(n2)o2)记录的移动次数当初始文件为"正序”时,移动次数为0;当文件初态反序时,每趟排序均要执行交换操作,其中的移动次数取最大值(n-1);3)时间复杂度简单选择排序的平均时间复杂度[1]为0(n2)o4)稳定性分析简单选择排序是不稳定的。3.1.2冒泡排序1)关键字比较次数若初始序列为"正序”序列,则只需进行一趟排序,在排序过
7、程中进行(n-1)次关键字的比较。反之,若初始序列为“逆序”序列,则需进行(n-1)趟排序,需进行n(n-l)/2次比较。1)记录的移动次数当初始文件为"正序"时,移动次数为0;当文件初态"反序”时,每趟排序均要执行交换操作,其中的移动次数取最大值n(n-1)/2;2)时间复杂度冒泡排序的平均时间复杂度为0(n2)o但当原始关键字序列已有序时,只进行一趟比较就结束,此时时间复杂度为0(n).4)稳定性分析冒泡排序是稳定的。3.1.3直接插入排序1)关键字比较次数若初始序列为“正序”序列,则只需进行一趟排序,在
8、排序过程中进行(n-1)次关键字的比较。反之,若初始序列为"逆序”序列,则需进行(n+2)(n-1)/2次比较。2)记录的移动次数当初始文件为“正序"时,最小移动次数为0;当文件初态“反序”时,记录移动的次数也达最大值[1]:(n+4)(n-1)/2;3)时间复杂度直接插入排序的平均时间复杂度为0(n2)o4)稳定性分析冒泡排序是稳定的。3.2排序算法的分析1)若n较小(如nW50),可采用直接插入
此文档下载收益归作者所有