数据结构实验4 排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验4快速排序
一、实验目的和要求
1 在掌握各种排序方法的排序过程的基础上,完成快速排序算法程序设计。
2 能够对排序算法进行基本的复杂度分析。
二、实验内容
排序就是把一组元素按照某个域的值的递增或递减的次序重新排列的过程。
快速排序
在待排序记录序列中任取一个记录作为枢轴,以它作为比较的“基准”,将待排序划分为左右两个子序列,使行左边子序列中记录的关键字均小于等于枢轴,右边子序列中各记录的关键字都大于等于枢轴。对所划分的两组分别重复上述过程,直到各个序列的记录个数为1时为止。快速排序函数原型QuickSort(SeqList sq)。
设计一个算法,在顺序表存储结构上实现快速排序。排序数据为学生的考试成绩单。成绩单由学生的学号、姓名和成绩组成,设计一个程序对给定的n个学生的成绩单按照名次列打印出每个学生的名次、学号、姓名和成绩。
三、实验步骤
1.输入待排序的记录
2. 对自定义记录类型重载比较运算符
3.排序
1)并选择第一个记录作为pivotkey记录
2)从high指向的记录开始,向前找到第一个关键字的值小于Pivotkey的记录,将其放到low指向的位置,low+1
3).从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,将其放到high指向的位置,high-1
4)重复2),3),直到low=high,将枢轴记录放在low(high)指向的位置
5)重复2),3),4),直到整个记录有序为止
6) 输出排序记录
,完成比较。
4. 附加要求:不采用运算法重载的方式,而是定义compare函数指针,通过传给quicksort 函数指针,完成排序。
四、实验提示
算法实现:
#include "iostream.h"
#define MaxSize 100
typedef int DataType;
class CRecord
{
public:
int No;
string name;
int grade;
}
Typdef CRecord DataType;
class SeqList{
public:
CRecord * data;
int length;
}
//创建顺序表
V oid SLCreat(SeqList & sq);
{ CRecord x;
length = 0;
cout <<"请输入数据元素数”;
cin>>sq.length;
sq.data= new CRecord[sq.length];
cout <<"请输入数据元素值: no, , name grade ";
for(int i = 0; i < n; i++)
{
cin >> sq.data[i].no>>sq .data[i].name>>sq. data[i]grade;
}
}
//排序
V oid Sort( SeqList & sq )
{ SLCreat(sq);
QuickSort(sq,0,sq.length);
}
//快速排序
void QuickSort(SeqList & sq, int low, int high)
{ int pos;
if(low < high)
{ pos = partition(sq,low, high);
QuickSort(sq,low, pos-1);
QuickSort(sq, pos+1, high);
}
}
int partition(SeqList & list, int i, int j)
{ DataType pivotkey;
pivotkey = list[i];
while(i < j)
{ while(i < j&&list[j] >= pivotkey) --j;
if(i < j) list[i++] = list[j];
while(i < j&&list[i] <= pivotkey) ++i;
if(i < j) list[j--] = list[i];
}
list[i] = pivotkeyl
return i;
}
//将顺序表显示在屏幕上
void SLPrint(SeqList & sq)
{
cout <<"快速排序结果: "’
for(int i = 0; i cout< cout << endl; } void main( ) { SeqList myList; SLCreat(SeqList &mylist); Sort(mylist ); SLPrint( ); }