实验五 快速排序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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].keytmp.key,将R[i]移至j所指的位置上,一次重复直至I=j,此时所有R[k](k=1,2,…,j-1)的关键字都小于tmp.key而所有R[k](k=j+1,j+2,…,n)的关键字都大于tmp.key,则可将tmp中的记录移至I所指位置R[i],它将无序中记录分割成R[1..j-1]和R[j+1..n],然后再分别进行排序。

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.独立完成实验要求的内容,仔细观察和记录实验结果,领会实验目的,并认真完成实验报告。

相关文档
最新文档