C程序设计中关于排序探析

C++程序设计中关于排序探析摘要:排序就是在计算机中对不规则数据进行升序或降序排列实现的方法;排序算法有冒泡排序、选择排序和插入排序等,各种算法的实现其复杂度都不一样,复杂度的大小体现了算法的优劣。关键词:冒泡排序;选择排序;插入排序中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)31-7504-04排序(Sorting)是C++程序设计中基本并且常用的算法,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。本文将讨论三种排序算法的实现,并对三种排序算法进行比较分析。1排序的分类1.1按是否涉及数据的内、外存交换分为[1]:1)内部排序:内部排序(简称内排序),是带排序纪录存放在计算机内存中进行的排序过程。2)外部排序:外部排序(简称外排序),是带排序纪录的数量很大,以至于内存一次不能容纳全部纪录,在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序的排序方法。1.2按策略划分内部排序可分为1)插入排序,包括:直接插入排序,其它插入排序,希尔排序;2)快速排序,包括:冒泡排序,快速排序;3)选择排序,包括:简单选择排序,树形选择排序,堆排序;4)归并排序;5)基数排序,包括:多关键字的排序,链式基数排序。2排序的实现由于排序有很多种方法,本文主要讨论内部排序的几种实现。2.1冒泡排序算法实现思想:将被排序的数组R[l...n]垂直排列,即将元素R[l]到R[n]排列垂直如气泡状,约定数据小的为轻气泡,大的为重气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”飘浮[2]”o如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止(图1)。2.2简单选择排序算法实现思想:对于一组数据{KI,K2,…,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)。直接插入排序(StraightInsertionSort)是一种最简单的排序方法,它的基本思想是将任一数插入到已排好序的数据序列中并保持序列的排序。如果数组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排序算法的分析3.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)关键字比较次数若初始序列为"正序”序列,则只需进行一趟排序,在排序过程中进行(n-1)次关键字的比较。反之,若初始序列为“逆序”序列,则需进行(n-1)趟排序,需进行n(n-l)/2次比较。2)记录的移动次数当初始文件为"正序"时,移动次数为0;当文件初态"反序”时,每趟排序均要执行交换操作,其中的移动次数取最大值n(n-1)/2;3)时间复杂度冒泡排序的平均时间复杂度为0(n2)o但当原始关键字序列已有序时,只进行一趟比较就结束,此时时间复杂度为0(n).4)稳定性分析冒泡排序是稳定的。3.1.3直接插入排序1)关键字比较次数若初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行(n-1)次关键字的比较。反之,若初始序列为"逆序”序列,则需进行(n+2)...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?