快速排序实验报告

上传人:壹****1 文档编号:470605213 上传时间:2022-07-19 格式:DOCX 页数:8 大小:136.34KB
返回 下载 相关 举报
快速排序实验报告_第1页
第1页 / 共8页
快速排序实验报告_第2页
第2页 / 共8页
快速排序实验报告_第3页
第3页 / 共8页
快速排序实验报告_第4页
第4页 / 共8页
快速排序实验报告_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《快速排序实验报告》由会员分享,可在线阅读,更多相关《快速排序实验报告(8页珍藏版)》请在金锄头文库上搜索。

1、南京邮电大学通达学院实验报告实验名称: 快速排序算法 课程名称:微型计算机原理与接口技术姓名 班级学号: 钱煜中 142501 14250120 实验时间: 快速排序原理一、 实验原理:快速排序算法quick sort主要是利用分治递归的思想进行排序的方法。它的原理是首先从待排序的原始序列ap,r中选取一个元素aq作为分界点(pivot),然后将序列分为两个子序列,左边子序列ap,q-1元素的值都小于分界点m,右边子序列aq+1,r元素值都大于分界点的值,此时得到的序列命名为a,而aq应该处于其排好序后的正确位置。然后利用递归的思想,对左右两个子序列ap,q-1和aq+1,r再分别进行排序,直

2、到子序列的长度为1结束,序列有序。其中,选取a中的基准分界点的方式有多种,或者选择序列的首元素ap,或者选择序列的尾元素ar,或者选择序列中间位置的元素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 int fast

3、_sort(int *a,int i,int j,int *p,int *b)int k,temp,f,g;g=*p;g=(12*g)-12;/intf(成功进入快速排序 g=%dn,g);k=i;i+;for(;iak&ij;)j-;for(;aiak&ij;)i+;/intf(i=%dn,i);if(i=j)break;if(iaj)temp=ak;ak=aj;aj=temp;/r(f=0;f12;f+)/intf(%3d,af);/printf(排序成功 n);for(f=0;f12;f+)*(b+g+f)=af;return j;void digui(int *a,int i,int

4、j,int *p,int *b,int *z)int k;if(i*z)*z=*p;/printf(z=%dnp=%d,*z,*p);*p=*p-1;void main()int a=38, 81, 22, 48, 13, 69, 93, 14, 45, 58, 79, 72;int b1012;int y=0,k,x=0,z=0;printf( 初始序列为 );for(k=0;k12;k+)printf(%3d,ak );printf(n);digui(a,0,11,&x,b,&z);for(y=1;yz+1;y+)printf(第%2d次后的数组为,y);for(k=0;k12;k+)pr

5、intf(%3d,by-1k);printf(n);三、 实验数据(给出实验结果) 对序列a = 38, 81, 22, 48, 13, 69, 93, 14, 45, 58, 79, 7238 81 22 48 13 69 93 14 45 58 79 7238 14 22 48 13 69 93 81 45 58 79 7238 14 22 13 48 69 93 81 45 58 79 72进行快速排序,其中,以序列的首元素作为排序的分界点。输出结果要求:输出每一次分区后的结果以及最终排序结果。四、 实验总结(问题、解决方法、心得体会等)这次实验我做了很久,重新编写了算法很多次。最开始我

6、对算法的理解不够深,在递归自调用的时候没有想通上下界其实在递归下一层的时候下一层是知道上一层的上下界的,只要排序算法里返还一个最好作为比较值的位置就可以了。一开始排序算法写完就把每次数输出出来,知道后来和同学讨论正确答案是排序了多少次,才想想到我是把每个区排完后的情况,而其实我想输出的是每次排序后数组情况。可是一开始进入的就是左半区的左半区的左半区。反正一次是无法输出全部的,因为右半区还没有算。思考了很久,我决定建立一个二维数组,第一行是第一次后的数组,第二行是第二次后的数组。可是如何确定现在是第几次?我建立了一个指针,每次进入递归一层就会+1,每次出递归就会-1,这样就知道这次排序后的数是放在第几次也就是第几层。但是输出的时候还是不知道到底有几行被写入了数,于是又建立了一个指针,储存递归层数最多的时候是几,最后终于完成了算法。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号