大家好,欢迎来到IT知识分享网。
数据结构与算法课程实验报告
实验六:排序实践
姓名:
班级:
学号:
实验六 排序实践
一.实验内容:
二.实验目的:
三:问题描述:
希尔排序:在每趟排序前,先设置一个增量,将整个待排记录序列逐段分割成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
起泡排序:第一趟起泡排序是将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。以此类推,直到将第n-1个记录和第n个记录的关键字进行比较过为止。再进行第二趟起泡排序,直到在一趟排序过程中没有进行过交换记录的操作为止。
简单选择排序:通过n-i次关键字间的比较,从n-i+1个记录中选择出关键字最小的记录,并和第i(1<=i<=n)个记录交换。
四:问题实现:
1.定义了两个数据结构,记录类型和顺序表类型。
typedef struct
{
}RedType;
typedef struct
{
RedType r[MAX+1];
int length;
}SqList;
2.主要实现思路:将待排序的序列存放在顺序表里,再进行相应的排序,每个排序都有初始关键字、每趟排序结果、最终排序结果的显示。
希尔排序:要自定义排序的趟数和每趟排序的增量,增量存放在一个数组里。主要是通过比较关键字的大小,记录后移,找到插入位置,然后插入。
起泡排序:设置了一个标记 flag;用于标记排序是否结束,flag=1继续,flag=0结束。主要是通过两两比较,每次都选出一个无序区里最大的关键字,直到全部有序为止。
简单选择排序:定义了一个函数SelectMinKey(SqList &L,int i)返回key最小的记录的下标。主要是选择关键字最小的记录的操作。
五:主要源程序代码(包含程序备注)
1.顺序表的初始化
SqList InitSqList(SqList &L)
{
}
2.顺序表的创建
SqList CreateSqList(SqList &L)
{
}
3.定义SelectMinKey(SqList &L,int i)函数,返回key最小的记录的下标。
int SelectMinKey(SqList &L,int i)
{
}
4. 简单选择排序的实现
void SelectSort(SqList &L)//对顺序表L作简单选择排序
{
}
5.起泡排序的实现
void BubbleSort(SqList &L)
{
}
6.一趟希尔排序的实现
void ShellInsert(SqList &L,int d) // L.r[0]是暂存单元,不是哨兵。j<=0时,插入位置已找到
{
}
7. t趟希尔排序的实现
void ShellSort(SqList &L)
{
}
8.主程序
void main()
{
}
六:总结
在设计希尔排序的增量时,存在一些问题。我设计的是让用户自己定义要排序的趟数,和每趟排序的增量,并且设置了最后一趟增量必须为1,但其他没有强制设置。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15652.html