1 / 9
文档名称:

快速排序实验报告.docx

格式:docx   大小:142KB   页数:9页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

快速排序实验报告.docx

上传人:花开一叶 2019/10/31 文件大小:142 KB

下载得到文件列表

快速排序实验报告.docx

相关文档

文档介绍

文档介绍:---------------------------------作者:_____________-----------------------------日期::_____________快速排序实验报告南京邮电大学通达学院实验报告实验名称:快速排序算法课程名称:微型计算机原理与接口技术姓名班级学号:钱煜中14250114250120实验时间::快速排序算法quicksort主要是利用分治递归的思想进行排序的方法。它的原理是首先从待排序的原始序列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<>intfast_sort(int*a,inti,intj,int*p,int**b){ intk,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]; } returnj;}voiddigui(int*a,inti,intj,int*p,int**b,int*z){ intk; 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; }}voidmain(){ inta[]={38,81,22,