各种内排序算法的实现及性能的比较(16页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《各种内排序算法的实现及性能的比较(16页).doc》由会员分享,可在线阅读,更多相关《各种内排序算法的实现及性能的比较(16页).doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-各种内排序算法的实现及性能的比较-第 16 页实 验 报 告(2015/2016学年 第2学期)课程名称数据结构A实验名称各种内排序算法的实现及性能的比较实验时间2016年6月20日指导单位计算机科学与技术系指导教师骆健学生姓名班级学号学院(系) 管理学院专 业信息管理与信息系统一、 问题陈述(1) 验证教材的各种内排序算法(2) 分析各种内排序算法的时间复杂度(3) 改进教材中的快速排序法,使得当子集和小于10个元素时改用直接插入排序(4) 使用随机数发生器产生大数据集合,运行上述 各排序算法,使系统时钟测量个算法所需的实际时间,并进行比较。系统时钟包含在头文件“”中。二、概要设计Main
2、.cpp调用Menu.h ,为主程序。三、详细设计简单选择排序:将初始序列(A0An-1)作为待排序序列,第一趟在待排序序列(A0An-1)中找最小元素,与该序列中第一个元素A0交换,这样子序列(A0)有序,下一趟排序在带牌子序列(A1An-1)中进行。第i趟排序子序列(Ai-1An-1)中进行。经过n-1趟排序后使得初始序列有序。程序流程图:开始i=0in-1Small=ij=i+1jnAjAsmallSmall=jSwap(Ai,Asmall)j+结束NNNYYi+直接插入排序:一个元素插入到有序表中,首先将其存入临时变量temp,然后从后往前查找插入位置。当temp小于表中元素时,就将该
3、元素后移一个位置,继续比较、移动,直到temp大于等于表中元素或者到了有序表的第一个元素结束,这时就可将temp存入刚后移的元素的位置了。程序流程图:开始i0&temp0last=0;j=0jiAj+1=j时将j与第一个元素交换。程序流程图:开始leftrighti=left;j=righti+AiAleftijSwap(Ai,Aj)ijSwap(Aleft,Aj)Qsort(A,left,j-1)Qsort(A,j+1,right)结束NYYNYNNYYN两路合并排序:将有n 个元素的序列看成是n个长度为1的有序子序列,然后两两合并子序列,得到n/2个长度为2或1的有序子序列,再两两合并直到
4、得到一个长度为n的有序序列时结束。程序流程图:开始int size=1Sizeni1=1i1+sizen-1j2=n-1Merge(A,i1,j1,i2,j2)i1=j2+1size*=2结束j2=i2+size-1NYYNNY四、程序代码#include /简单选择排序template void SelectSort(T A, int n)int small;for (int i=0; in-1; i+) small=i;for(int j=i+1;jn;j+)if(AjAsmall)small=j;Swap(Ai,Asmall);I#include /直接插入排序template void
5、 InsertSort(T A, int n)for(int i=1; i0&tempAj-1)Aj=Aj-1;j-;Aj=temp;/*ok!*/B#include template void BubbleSort(T A, int n) int i,j,last; i=n-1; while(i0) last=0; for(j=0;ji;j+) if(Aj+1Aj) Swap(Aj,Aj+1); last=j; i=last;Q#include /改进的快速排序templatevoid quick(T A,int n)int *a; int top=0,right,left,j; a=new
6、 intn;if(a=NULL) return;atop+=0;atop+=n-1; /lcfor(j=0;aj!=NULL;j+) left=aj+;right=aj; if(leftright)Swap(left,right); if(right-left15)InsertSortExt(A,left,right); elseatop+=left; atop+=QuickSort(A,left,right)-1;atop+=atop-2+2;atop+=right; templateint QuickSort(T A,int left,int right) int i,j;if(leftr
7、ight)i=left;j=right+1;dodo i+;while(AiAleft);if(ij)Swap(Ai,Aj);while(ij);Swap(Aleft,Aj);return j;return 0;templatevoid InsertSortExt(T A,int left,int right)for(int i=left+1; i0 & tempAj-1) Aj=Aj-1; j-; Aj=temp; M#include /两路合并的C+程序template void Merge(T A,int i1,int j1,int i2,int j2) T *Temp=new Tj2-
8、i1+1; int i=i1,j=i2,k=0; while(i=j1&j=j2)if(Ai=Aj)Tempk+=Ai+;else Tempk+=Aj+;while(i=j1)Tempk+=Ai+;while(j=j2)Tempk+=Aj+;for(i=0;ik;i+)Ai1+=Tempi;delete Temp; /合并排序的C+程序template void MergeSort(T A, int n)int i1,j1,i2,j2; int size=1; while(sizen)i1=0;while(i1+sizen-1)j2=n-1;else j2=i2+size-1;Merge(A,
9、i1,j1,i2,j2);i1=j2+1;size*=2;M#include #include #include #include #include selectsort.h#include insertsort.h#include bubblesort.h#include quicksort.h#include mergesort.h#define SIZE 400#define TIMES 1000template class Menupublic:void printmenu();void selectsort();/简单选择排序void insertSort();/直接插入排序void
10、 bubbleSort();/冒泡排序void quickSort();/快速排序void mergeSort();/两路合并排序void childmenu();/子菜单1void childmenu2();/子菜单2void switcha();private:int a,b,c;template void Menu:printmenu()cout-内排序测试系统-endl;cout endlendlendl;cout1.简单选择排序endl;cout2.直接插入排序endl;cout3.冒泡排序endl;cout4.快速排序endl;cout5.两路合并排序endl;cout6.退出sw
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 各种 排序 算法 实现 性能 比较 16
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内