- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.基本思想:
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
2.排序过程:
【示例】:
初始关键字[4938659776132749]
第一趟排序后13[38659776492749]
第二趟排序后1327[659776493849]
第三趟排序后132738[9776496549]
第四趟排序49976576]
第五趟排序后1327384949[979776]
第六趟排序后132738494976[7697]
第七趟排序后13273849497676[97]
最后排序结果1327384949767697
3.
voidselectionSort(Type*arr,longlen)
{
longi=0,j=0;/*iteratorvalue*/
longmaxPos;
assertF(arr!=NULL,InInsertSortsort,arrisNULL\n);
for(i=len-1;i=1;i--)
{
maxPos=i;
for(j=0;ji;j++)
if(arr[maxPos]arr[j])maxPos=j;
if(maxPos!=i)swapArrData(arr,maxPos,i);
}
}
选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.
二.直接插入排序
插入排序(InsertionSort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。
直接插入排序
直接插入排序(StraightInsertionSort):将一个记录插入到排好序的有序表中,从而得到一个新的、记录数增1的有序表。
直接插入排序算法
哨兵(监视哨)有两个作用:一是作为临变量存放R[i](当前要进行比较的关键字)的副本;二是在查找循环中用来监视下标变量j是否越界。
当文件的初始状态不同时,直接插入排序所耗费的时间是有很大差异的。最好情况是文件初态为正序,此时算法的时间复杂度为O(n),最坏情况是文件初态为反序,相应的时间复杂度为O(n2),算法的平均时间复杂度是O(n2)。算法的辅助空间复杂度是O(1),是一个就地排序。
直接插入排序是稳定的排序方法。
三.冒泡排序
[算法思想]:将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上飘浮。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
[算法]:
voidBubbleSort(SeqListR){
//R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
inti,j;
Booleanexchange;//交换标志
for(i=1;in;i++){//最多做n-1趟排序
exchange=FALSE;//本趟排序开始前,交换标志应为假
for(j=n-1;j=i;j--)//对当前无序区R[i..n]自下向上扫描
if(R[j+1].keyR[j].key){//交换记录
R[0]=R[j+1];//R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE;//发生了交换,故将交换标志置为真
}
if(!exchange)return;//本趟排序未发生交换,提前终止算法
}//endfor(外循环)
}//BubbleSort
[分析]:起泡排序的结束条件为:最后一趟没有进行“交换”。从起泡排序的过程可见,起泡排序是一个增加有序序列长度的过程,也是一个缩小无序序列长度的过程,每经过一趟起泡,无序序列的长度只缩小1。[算法思想]:将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上飘浮。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
[算法]:
voidBubbleSort(SeqListR){
//R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
inti,j;
Booleanexchange;//交换标志
for(i=1;in;i++){//最多做n-1趟排序
您可能关注的文档
最近下载
- 餐厅差评培训课件.pptx VIP
- 湖北省武汉市汉阳区2024-2025学年上学期期中质量检测八年级 物理试卷(无答案).docx VIP
- 公司理财第五版刘曼红习题答案.docx VIP
- 汽车维修业务接待完整版全套PPT电子课件.ppt
- 绘本《消防车吉普达》PPT课件.pptx VIP
- 广东省深圳市2024-2025学年七年级上学期期中考试数学试卷(含答案).pdf VIP
- 2025年中国大型PLC自主可控白皮书-.pptx VIP
- 广州铁路局机考真题答案.pdf VIP
- 2024—2025学年湖北省武汉市东湖高新八年级上学期期中语文试卷.doc VIP
- 中信建筑设计研究总院2013年招聘简章重点.PDF VIP
原创力文档


文档评论(0)