快速排序实验报告.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 快速 排序 实验 报告
- 资源描述:
-
南京邮电大学通达学院 实验报告 实验名称: 快速排序算法 课程名称:微型计算机原理与接口技术 姓名 班级学号: 钱煜中 142501 14250120 实验时间: 2016.12.2 快速排序原理 一、 实验原理: 快速排序算法quick sort主要是利用分治递归的思想进行排序的方法。它的原理是首先从待排序的原始序列a[p,…,r]中选取一个元素a[q]作为分界点(pivot),然后将序列分为两个子序列,左边子序列a[p,…,q-1]元素的值都小于分界点m,右边子序列a[q+1,…,r]元素值都大于分界点的值,此时得到的序列命名为a’,而a[q]应该处于其排好序后的正确位置。然后利用递归的思想,对左右两个子序列a[p,…,q-1]和a[q+1,…,r]再分别进行排序,直到子序列的长度为1结束,序列有序。 其中,选取a中的基准分界点的方式有多种,或者选择序列的首元素a[p],或者选择序列的尾元素a[r],或者选择序列中间位置的元素a[(p+r)/2],或者取这三个元素按照大小排序后的中间值。 例子: a = [38, 81, 22, 48, 13, 69, 93, 14, 45, 58, 79, 72],取[(left+right)/2]处的元素作为分界点(pivot)的值。具体第一次分区过程如下: 因此,第一次分区,以69为分界点,结果为: a’= [14, 58, 22, 48, 13, 38, 45, 69, 93, 81, 79, 72]。 二、 实验代码 #include <stdio.h> int fast_sort(int *a,int i,int j,int *p,int **b) { int k,temp,f,g; g=*p; g=(12*g)-12; //intf("成功进入快速排序 g=%d\n",g); k=i; i++; for(;i<j;) { for(;a[j]>a[k]&&i<j;) { j--; } for(;a[i]<a[k]&&i<j;) { i++; } //intf("i=%d\n",i); if(i==j) break; if(i<j); { temp=a[i]; a[i]=a[j]; a[j]=temp; } } if(a[k]>a[j]) { temp=a[k]; a[k]=a[j]; a[j]=temp; } //r(f=0;f<12;f++) // //intf("%3d",a[f]); // //printf("排序成功 \n"); for(f=0;f<12;f++) { *(b+g+f)=a[f]; } return j; } void digui(int *a,int i,int j,int *p,int **b,int *z) { int k; if(i<j) { //intf("成功进入递归 p=%d\n",*p); *p=*p+1; k=fast_sort(a,i,j,p,b); digui(a,i,k-1,p,b,z); digui(a,k+1,j,p,b,z); if(*p>*z) *z=*p; //printf("z=%d\np=%d",*z,*p); *p=*p-1; } } void main() { int a[]={38, 81, 22, 48, 13, 69, 93, 14, 45, 58, 79, 72}; int b[10][12]; int y=0,k,x=0,z=0; printf(" 初始序列为 "); for(k=0;k<12;k++) { printf("%3d",a[k] ); } printf("\n"); digui(a,0,11,&x,b,&z); for(y=1;y<z+1;y++) { printf("第%2d次后的数组为",y); for(k=0;k<12;k++) printf("%3d",b[y-1][k]); printf("\n"); } } 三、 实验数据(给出实验结果) 对序列a = [38, 81, 22, 48, 13, 69, 93, 14, 45, 58, 79, 72] 38 81 22 48 13 69 93 14 45 58 79 72 38 14 22 48 13 69 93 81 45 58 79 72 38 14 22 13 48 69 93 81 45 58 79 72 进行快速排序,其中,以序列的首元素作为排序的分界点。输出结果要求:输出每一次分区后的结果以及最终排序结果。 四、 实验总结(问题、解决方法、心得体会等) 这次实验我做了很久,重新编写了算法很多次。最开始我对算法的理解不够深,在递归自调用的时候没有想通上下界其实在递归下一层的时候下一层是知道上一层的上下界的,只要排序算法里返还一个最好作为比较值的位置就可以了。一开始排序算法写完就把每次数输出出来,知道后来和同学讨论正确答案是排序了多少次,才想想到我是把每个区排完后的情况,而其实我想输出的是每次排序后数组情况。可是一开始进入的就是左半区的左半区的左半区。。。反正一次是无法输出全部的,因为右半区还没有算。思考了很久,我决定建立一个二维数组,第一行是第一次后的数组,第二行是第二次后的数组。可是如何确定现在是第几次?我建立了一个指针,每次进入递归一层就会+1,每次出递归就会-1,这样就知道这次排序后的数是放在第几次也就是第几层。但是输出的时候还是不知道到底有几行被写入了数,于是又建立了一个指针,储存递归层数最多的时候是几,最后终于完成了算法。展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




快速排序实验报告.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4333313.html