排序算法的比较课程设计实验报告Word格式文档下载.docx
- 文档编号:20945699
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:135.49KB
排序算法的比较课程设计实验报告Word格式文档下载.docx
《排序算法的比较课程设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《排序算法的比较课程设计实验报告Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
3.可读性:
源程序代码清晰、有层次
4.健壮性:
用户输入非法数据时,系统要及时给出警告信息
五、实验歩骤:
#include"
iostream.h"
stdio.h"
stdlib.h"
time.h"
longcount=0;
#defineMAXSIZE100000
typedeflongkeyType;
typedefstruct{
keyTypekey;
}RcdType;
typedefstruct{
RcdTyper[MAXSIZE+1];
intlength;
}SqList;
SqListL;
voidSwap(RcdType&
r1,RcdType&
r2){
RcdTypet=r1;
r1=r2;
r2=t;
}
voidprint(SqListL){
for(longi=1;
i<
=L.length;
i++)cout<
<
L.r[i].key<
"
\t"
;
cout<
endl;
/*************************
直接插入排序
*************************/
longInsertionSort(SqList&
L){
//对顺序表L作直接插入排序
count=0;
for(longi=2;
i<
++i)//n-1趟
if(L.r[i].key<
L.r[i-1].key){
L.r[0]=L.r[i];
//设置哨兵
for(longj=i-1;
L.r[0].key<
L.r[j].key;
--j){
count++;
L.r[j+1]=L.r[j];
}//记录向后顺移
L.r[j+1]=L.r[0];
//插入到正确位置
}
returncount;
冒泡排序
longBubbleSort(SqList&
L)
{
intflag=1;
count=0;
for(longi=1;
L.length;
i++){//n-1趟排序
count++;
flag=0;
for(longj=1;
j<
=L.length-i;
j++)//每一趟里n-i次比较
if(L.r[j+1].key<
L.r[j].key)
Swap(L.r[j],L.r[j+1]);
//交换L.r[i]与L.r[j]
快速排序
longPartition(SqList&
L,longlow,longhigh){
L.r[0]=L.r[low];
count++;
keyTypepivotkey=L.r[0].key;
//枢轴
while(low<
high){//循环结束时low==high+1
while(low<
high&
&
L.r[high].key>
=pivotkey)--high;
//从右向左搜索关键字比枢轴小的记录并控制越界
if(low<
high){L.r[low++]=L.r[high];
}//比枢轴记录小的移到左部
while(low<
L.r[low].key<
=pivotkey)++low;
//从左向右搜索关键字比枢轴大的记录并控制越界
high){L.r[high--]=L.r[low];
}//比枢轴记录大的移到右部
L.r[low]=L.r[0];
returnlow;
//low==high+1
voidQSort(SqList&
//对记录序列L.r[low..high]进行快速排序
if(low<
high){//记录个数大于1
longpivotloc=Partition(L,low,high);
//对L.r[low..high]进行一次划分
QSort(L,low,pivotloc-1);
//对左部进行快速排序
QSort(L,pivotloc+1,high);
//对右部进行快速排序
longQuickSort(SqList&
L){
QSort(L,1,L.length);
简单选择排序
longSelectMinKey(SqList&
L,inti)
{longj=i;
for(longk=i+1;
k<
=L.length;
k++)
if(L.r[k].key<
L.r[j].key)j=k;
returnj;
longSelectSort(SqList&
L){
++i){
//选择第i小的记录,并交换到位
longj=SelectMinKey(L,i);
//在L.r[i..L.Length]中选择关键字最小的记录
if(i!
=j)Swap(L.r[i],L.r[j]);
//与第i个记录交换
操作选择函数
voidoperate(){
time_tstart,end;
doubledif;
longdegree;
SqListL1;
charch;
cout<
请选择排序算法:
cin>
>
ch;
switch(ch){
case'
a'
:
for(longi=1;
i++)L1.r[i]=L.r[i];
L1.length=L.length;
time(&
start);
degree=InsertionSort(L1);
end);
dif=difftime(end,start);
直接插入排序所用时间:
<
dif<
"
秒\n"
直接插入排序移动次序:
degree<
endl;
print(L1);
break;
}
b'
degree=BubbleSort(L1);
冒泡排序所用时间:
冒泡排序移动次序:
c'
degree=QuickSort(L1);
快速排序所用时间:
快速排序移动次序:
d'
degree=SelectSort(L1);
简单选择排序所用时间:
简单选择排序移动次序:
q'
exit(0);
//退出
default:
您的输入错误,请输入正确的操作!
}
主函数
voidmain()
\n欢迎进入排序算法"
\n设计者:
樊盼盼"
\n班级:
计科1411"
\n指导老师:
王宏杰"
\n设计时间:
2016年6月\n"
================================================================================"
a---直接插入排序"
b---冒泡排序"
c---快速排序"
d---简单选择排序"
q---退出程序\n"
\n请输入要产生的随机数的个数:
longn;
n;
srand((unsignedlong)time(NULL));
for(longi=1;
=n;
i++)L.r[i].key=rand()%n;
L.length=n;
print(L);
for(intj=0;
=7;
j++)operate();
六、运行结果:
点击执行出现的第一个界面
输入要产生的随机数的个数,得到如下
请选择直接插入排序算法,得到的结果如下
选择冒泡排序算法
选择快速排序算法
选择简单选择排序算法
选择去退出程序
七、得意之处:
输入相应的序号可以跳转到不同的程序去调用不同的排序方法去执行,计算出不同的运行次数。
八、创意的技术实现:
调用了operate();
操作函数。
经过调用这个函数才能进入菜单里选择要采用的不同的排序方法。
九、目前存在的问题:
每种排序算法的排序所用时间不能显示出来,在时间上还需改进。
一十、设计实验过程中的自我感受:
好的算法+编程技巧+高效率=好的程序。
1.做什么都需要耐心,做设计写程序则需要耐心。
一开始的时候,好不容易写好了程序,可是等最后调试的时候发现错误很隐蔽,就很浪费时间了。
后来我先在纸上构思出函数的功能和参数,先把各小部分编好才编主函数,考虑好接口之后才动手编,这样就比较容易成功了。
2.做任何事情我决定都应该有个总体规划。
之后的工作按照规划逐步展开完成。
对于一个完整的程序设计,首先需要总体规划写程序的步骤,分块写,分函数写,然后写完一部分马上纠错调试。
而不是像我第一次那样,一口气写完,然后再花几倍的时间调试。
一步步来,走好一步再走下一步。
3.感觉一开始设计结构写函数体现的是数据结构的思想,后面的调试则更加体现了人的综合素质,专业知识、坚定耐心、锲而不舍,真的缺一不可。
4.通过这次课设,不仅仅复习了C语音相关知识、而且也了解并初步掌握了c++,通过这次课设,磨练了我的意志,是我更有了自信心。
一十一、主要参考资料:
[1]严蔚敏等,《数据结构》,清华大学出版社,北京.2000
[2]谭浩强,《C语言程序设计》,清华大学出版社,北京.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序 算法 比较 课程设计 实验 报告