10.1几种基本排序算法的实现.doc
《10.1几种基本排序算法的实现.doc》由会员分享,可在线阅读,更多相关《10.1几种基本排序算法的实现.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流10.1几种基本排序算法的实现【精品文档】第 8 页数 据 结 构 实 验 报 告实验题目:几种基本排序算法的实现姓名: 张耀班级: 计嵌151学号: 1513052017一、 实验目的实现直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序等6种常用内部排序算法,比较各算法的比较次数和移动次数。二、 数据结构设计(1) 设计待排序记录的存储结构。(2) 设计待排序数据的存储结构。(3) 输入:待排序数据的数据个数和数据可由键盘输入,也可由程序生成伪随机数,以菜单方式选择上述排序方法中的一个,并指明输出第几趟排序的结果。(4)输出:各趟排序结
2、果或指定趟的排序结果,以及对应的关键字比较次数和移动次数。三、 算法设计与N-S图算法设计:编写一个主函数main(),在主函数中设计一个简单的菜单,分别调用6种内部排序算法。为了对各种排序算法的性能进行比较,算法中的主要工作是在已知算法的适当位置插入对关键字的比较次数和移动次数的计数操作。为此,可设立一个实现排序算法中的关键字比较的函数;设立一个实现排序算法中的关键字移动的函数;设立一个实现排序算法中的关键字交换的函数,从而解决比较次数和移动次数的统计问题。数据的输入也可以通过菜单选择输入方式:键盘输入或由伪随机数程序生成数据,以便随时更换排序数据,并按照不同要求对排序数据进行排序,输出排序
3、的结果以及对应的关键字比较次数和移动次数。对于测试数据,算法中可以考虑几组数据的典型性,如正序,逆序和不同程度等,以取得直观的感受,从而对不同算法进行比较。四、 程序清单#includeusing namespace std;void showMenu()cout * 菜单 * endl;cout 1.直接插入排序 endl;cout 2.冒泡排序 endl;cout 3.简单选择排序 endl;cout 4.快速排序 endl;cout 5.希尔排序 endl;cout 6.堆排序 endl;cout 7.退出程序 endl;struct SqListint * key;int length
4、;void CreateSqList(SqList &sl)/type为intint n;cout 建立顺序表 endl 请输入顺序表的长度 n;sl.length = n;sl.key = new intsl.length + 1;cout 请输入数据: endl;for (int i = 1; i sl.keyi;void Copy(SqList &L1,SqList &L2)L2.length = L1.length;L2.key = new intL1.length + 1;for (int i = 1; i =L1.length; i+)L2.keyi = L1.keyi;void
5、OutPut(SqList &L)for (int j = 1; j = L.length; +j)cout L.keyj t;cout endl;void InsertSort(SqList & L)/对顺序表L作直接插入排序int k = 0;int compare_Time, move_Time;compare_Time = move_Time = 0;for (int i = 2; i = L.length; i+)if (L.keyi = L.keyi - 1)/需将L.keyi插入有序子表L.key0 = L.keyi;/复制为哨兵L.keyi = L.keyi - 1;int j
6、;for (j = i - 2; L.key0 = L.keyj; -j)compare_Time+;L.keyj + 1 = L.keyj;/记录后移move_Time+;L.keyj + 1 = L.key0;/插入到正确位置k+;cout 第 k 趟排序结果:; OutPut(L);compare_Time+;cout 比较次数为: compare_Time endl; cout 移动次数为: move_Time endl;void BubbleSort(SqList & L)int k = 0;int compare_Time, move_Time;compare_Time = mov
7、e_Time = 0;for (int i = 1; iL.length; i+)/用i控制比较趟数共n-1趟int t;for (int j = 1; j L.keyj + 1)t = L.keyj;L.keyj = L.keyj + 1;L.keyj + 1 = t;move_Time+;k+;cout 第 k 趟排序结果:; OutPut(L);cout 比较次数为: compare_Time endl;cout 移动次数为: move_Time endl;int SelectMinKey(SqList& L, int n, int &compare_Time)int min = n;i
8、nt minkey;/最小值minkey = L.keyn;for (int i = n + 1; i = L.length; i+)if (L.keyiminkey)minkey = L.keyi;min = i;compare_Time+;return min;void SelectSort(SqList & L)/对顺序表L作简单选择排序int j;int t;int k = 0;int move_Time = 0, compare_Time = 0;for (int i = 1; i = L.length; i+)j = SelectMinKey(L, i, compare_Time)
9、;/在L.keyi-L.keyL.length中选择最小的记录并将其地址赋给jif (i != j)/交换记录t = L.keyi;L.keyi = L.keyj;L.keyj = t;move_Time+;compare_Time+;k+;cout 第 k 趟排序结果:; OutPut(L);cout 比较次数为: compare_Time endl;cout 移动次数为: move_Time endl;int Partition(SqList& L, int low, int high,int &compare_Time,int &move_Time)/交换顺序表L中子表keylow-ke
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10.1 基本 排序 算法 实现
限制150内