数据结构与算法.docx
- 文档编号:3253075
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:13
- 大小:154.46KB
数据结构与算法.docx
《数据结构与算法.docx》由会员分享,可在线阅读,更多相关《数据结构与算法.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构与算法
目录
一、设计题目2
1.选题要求2
2、设计目的2
二、设计内容2
三、概要设计2
3.1、原始数据2
3.2、输出数据3
3.3模块间调用关系3
3.4调用关系图3
四、算法描述4
4.1主程序模块4
4.2可排序表单元模块5
4.3输出格式模块9
五、算法分析9
5.1原理分析10
5.2算法时间复杂度分析:
10
5.2.1、冒泡排序:
bubbleSort()10
5.2.2、选择排序:
SelectSort10
5.2.3、直接插入排序:
insSort()11
5.2.4、快序排序:
QuickSort(d)11
六、程序运行结果12
6.1.首次运行截图12
6.2.输入想要排列的数据进入下一步12
6.3输入1显示各排列后的数字和相关信息13
七、心得体会13
八、参考资料14
一、设计题目
1.选题要求
内部排序算法的性能分析
2、设计目的
(1)掌握各种排序的基本思想。
(2)掌握各种排序方法的算法实现。
(3)掌握各种排序方法的优劣分析及花费的时间的计算。
二、设计内容
利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。
采用各种内排序方法(直接插入、、简单选择、冒泡、快速进行)排序,需对每一种排序算法的实际执行时间进行列表比较,并对各种排序算法进行定量的性能分析。
待排序表的元素关键字为整数,用不同的测试数据做测试比较。
比较的指标为关键字的比较次数和关键字的移动次数。
三、概要设计
3.1、原始数据
用户输入记录的个数,数据由随机数产生器生成。
3.2、输出数据
产生的随机数分别选用起泡排序、直插排序、选择排序、快速排序、这些排序方法进行排序,输出排列后的数据,计算各种排序的复杂度。
3.3模块间调用关系
(1).Main调用SelectSort;InsertSort;BubbleSort;
QuickSort;Output(a,n);
用到的语句有:
use.SelectSort(a,n);use.InsertSort(a,n);use.BubbleSort(a,n);se.QuickSort(a,n);
(2)QuickSort调用Qsort函数
用到的语句有:
Qsort(a,0,n-1);
3.4调用关系图
图1调用关系
四、算法描述
4.1主程序模块
主函数代码:
voidmain()
{
ofstreamoutfile("text.txt",ios:
:
out);//把数据以文档形式输出
Sort
intn;
cout<<"输入元素个数:
"< cin>>n;//输入想要排列的数字 while (1) { cout<<"1: 各种排序方法并分析: "< cout<<"2: 分析各种排序方法利与弊: "< cout<<"3: 退出排序算法的分析程序: "< cout<<"请输入选择排序方法"< intnumber;//输入要执行的数字。 cin>>number; int*a=newint[n]; for(inti=0;i { a[i]=rand()%1000;//通过调用产生随机数据; outfile.put(char(a[i])); } outfile.close(); switch(number) { case1: use.SelectSort(a,n);//调用选择排序函数 use.Output(a,n);//调用输出形式的函数 cout<<"选择排序算法: "< cout<<"数据个数"<<""<<"执行时间"<<""<<"比较次数"<<""<<"交换次数"<<""<<"移动次数"<<""<<"执行次数"< cout< } } 主函数流程图 图2主函数流程图 4.2可排序表单元模块 A.选择排序 template voidSort : SelectSort(Ta[],intn) { start1=clock();//计算开始的时间 intsmall; for(inti=0;i { excute[0]++;//执行次数加一次 small=i;//最小值等于i for(intj=i+1;j if(a[j] { inttemp=a[i];//定义temp为数组a a[i]=a[small];//把最小值赋予i a[small]=temp;//把temp赋予数组中小的那数 } exchange[0]++;//交换次数加1 move[0]+=3;//移动次数加3 } finish1=clock();//计算结束时的时间 } B.起泡排序 voidSort : BubbleSort(Ta[],intn) { inti,j,flag,p; for(i=0;i {++compare[2];//比较次数加1 excute[2]++;//执行次数加一次 flag=1;//说明此趟排序有元素交换的动作 for(j=1;j<=n-i;j++)如果i小于n-1进行循环 { if(a[j+1] { flag=0;说明此趟排序无元素交换的动作 p=a[j]; a[j]=a[j+1];//j+1的值赋给j a[j+1]=p;//p的值赋给j+1 }move[2]=move[2]+3;//移动次数加3 }exchange[2]++;//交换次数加2 if(flag==1) return; } } voidBubbleSort(Ta[],intn); C.直接插入排序 voidSort : InsertSort(Ta[],intn) { start2=clock();//开始计时 for(inti=1;i { excute[1]++;//执行次数加一次 intx=a[i];//定义整整型x=a[i] move[1]++;//移动次数加1 for(intj=i-1;j>=0&&x { compare[1]++;//比较次数加1 a[j+1]=a[j],exchange[1]++;//交换次数加1 move[1]++;//移动次数加1 } compare[1]++;//比较次数加1 a[j+1]=x; } finish2=clock(); } voidInsertSort(Ta[],intn);、 D.快速排序 voidSort : QuickSort(Ta[],intn) { excute[3]++;//执行次数加一次 start4=clock(); Qsort(a,0,n-1);//调用Qsort函数 cout< cout< finish4=clock(); } template voidSort : Qsort(Ta[],intleft,intright) { inti,j; if(left { compare[3]++;//比较次数加1 i=left; j=right+1; do{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法