实验五 快速排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五快速排序
【实验时间】
【实验地点】
【实验目的和要求】
1.理解排序稳定性含义,掌握各种排序算法的稳定性;
2.掌握各种内部排序的基本算法和特点;
3.掌握快速排序的排序过程,程序实现快速排序。
【实验类型】验证性
【实验时数】2学时
【实验设备】计算机
【参考资料】
1.数据结构题解
2.C程序设计
【实验内容】
掌握快速排序的算法程序实现排序过程。
具体算法可描述如下:
设初始序列为a1,a2,……,an,以序列中的某个元素ai为基准(轴),经调整后,使得ai 左边的元素均小于ai,右边的均大于等于ai,而后对这两个子区再分别使用快速排序。[具体要求]
(1) 需要用一维数组a来存储等待排序的序列;
(2) 设置两个工作指针i和j;
(3) 每次快速排序都以排序区域的首元素为基准(轴);
(4) 程序用递归函数来实现。
【实验分析】
基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入最终位置后,整个数据区间被此记录分割成两个区间。所有关键字比该记录关键字小的放置在前子区间,所有关键字比它大的放后子区间中,并把该记录排在这两个子区间的中间,这样就完成了一趟快速排序。然后分别对两个子区间重复上述过程,直至划分的子区间长度为1。
一趟快速排序采用从两头向中间扫描的办法,同时交换与基准记录逆序的记录。具体做法是:设两个指示器I和j,它们的初值分别为指向无序区第一个和最后一个记录。假设无序区中记录为R[1..n],则I的初值为R[1],j的初值为R[n],首先将R[1]移到tmp 中作为基准,令j自n起向左扫描直至R[j].key
Void QuickSort(SqList R[],int s,int t)
{ int I=s,j=t;
SqList tmp;
If(s {tmp=R[s]; while (I!=j) { while(j>I&&R[j].key>tmp.key) j- -; if(I {R[i]= R[j]; I++; } while(j>I&&R[i].key I++; If(I { R[j]= R[i]; j- -; } } R[i]=tmp; QuickSort(R,s,I-1); QuickSort(R,i+1,t); } } 【注意事项】 1.学生上机时要严格遵守实验规章制度,若实验设备出现故障,应及时向实验指导教师反映,不要私自拆卸实验设备。 2.独立完成实验要求的内容,仔细观察和记录实验结果,领会实验目的,并认真完成实验报告。