- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C与数据结构实验指导教程1277
C++与数据结构实验指导教程1277
20、非淡泊无以明志,非宁静无以致远——诸葛亮
实验八 排 序
一、 实验目的和要求
1 掌握各种排序方法的排序过程
2 了解一些排序算法的实现(如插入排序、选择排序、冒泡排序、快速排序、堆排序等)
二、 基本概念
排序就是把一组元素按照某个域的值的递增或递减的次序重新排列的过程
(1) 直接插入排序
首先令排序表中的第1个记录有序,然后将第2个记录插入到有序表中合适位置,有序表就增加到了两个元素
再将第3个记录插入到有序表中的合适位置,依此类推,直到表中元素全部有序
(2)希尔排序
取一个整数d,将全部记录n分为d个子序列,将所有距离为d的记录放在同一个子序列中;在每个子序列内分别施行直接插入排序;然后缩小间隔d,重复上述子序列划分和排序,直到最后取 d = = 1,将所有记录放在同一个序列中排序为止
(3) 简单选择排序
首先在所有的记录中选出关键字最小的记录,把它与第一个记录交换,然后在其余的记录中再选出关键字最小的记录,与第二个记录交换,依次类推,直到所有记录排序完成
(4)冒泡排序
在待排序的记录序列中,从第一个待排序记录开始,依次比较两个相邻记录的关键字,如果是反序,则将两个记录进行交换
这样,在一趟比较完毕后,关键字最大的记录就被交换到最后
然后对前面n-1记录执行上述过程
(5)快速排序
在待排序记录序列中任取一个记录作为枢轴,以它作为比较的基准,将待排序划分为左右两个子序列,使行左边子序列中记录的关键字均小于等于枢轴,右边子序列中各记录的关键字都大于等于枢轴
对所划分的两组分别重复上述过程,直到各个序列的记录个数为1时为止
三、 程序例题
例题8.1 编写一程序要求能够实现直接插入排序、希尔排序、简单选择排序、冒泡排序和快速排序,并用测试函数对其进行测试
算法设计:根据题目要求,设计5个排序函数,实现各种排序功能
(1) 直接插入排序函数InsSort( ):设计思想,首先令排序表中的第1个记录有序,然后将第2个记录插入到有序表中合适位置,有序表就增加到了两个元素
再将第3个记录插入到有序表中的合适位置,依此类推,直到表中元素全部有序
(2) 希尔排序函数ShellSort( ):设计思想,取一个整数d,将全部记录n分为d个子序列,将所有距离为d的记录放在同一个子序列中;在每个子序列内分别施行直接插入排序;然后缩小间隔d,重复上述子序列划分和排序,直到最后取 d = = 1,将所有记录放在同一个序列中排序为止
(3) 简单选择排序函数SelectSort( ):首先在所有的记录中选出关键字最小的记录,把它与第一个记录交换,然后在其余的记录中再选出关键字最小的记录,与第二个记录交换,依次类推,直到所有记录排序完成
(4)冒泡排序函数BubbleSort( )
(5)快速排序函数QuickSort(int low, int high)
算法实现:
#include iostream.h
#define MaxSize 100
typedef int DataType;
class SeqList
{ DataType list[MaxSize];
int length;
public:
SeqList( ) {length = 0;}
void SLCreat(int n); //创建顺序表
void InsSort( ); //直接插入排序
void ShellSort( ); //希尔排序
void SelectSort( ); //简单选择排序
void BubbleSort( ); //冒泡排序
void QuickSort( ); //快速排序
void QuickSort(int low, int high); //快速排序
int partition(int i, int j);
void SLPrint( ); //将顺序表显示在屏幕上
};
//创建顺序表
void SeqList::SLCreat(int n);
{ DataType x;
length = 0;
cout 请输入数据元素值: ;
for(int i = 0; i n; i++)
{ cin x;
list[i] = x;
length++;
}
文档评论(0)