数据结构课程设计报告排序算法比较Word下载.docx
《数据结构课程设计报告排序算法比较Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告排序算法比较Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
4.具有良好的运行界面
5.算法具有良好的健壮性
6.按要求撰写课程设计报告和设计总结。
参考文献
1.《数据结构(C语言版)》,严蔚敏、吴伟民,清华大学出版社,1997.
2.《VisualC++实用教程(第一版)》,张荣梅、梁晓林,冶金工业出版社,2004.
审查意见
指导教师签字:
教研室主任签字:
年月日
1需求分析
对一组无序数运用各种算法进行排序,并返回排序移动次数和运行时间
2概要设计
main
生成无序数组
进行冒泡排序
进行希尔排序
进行选择排序
进行快速排序
进行归并排序
输出移动次数和时间
3运行环境(软、硬件环境)
1)硬件:
PC机
2)操作系统:
Windows2000/XP/2003
3)编译环境:
VisualC++6.0
4开发工具和编程语言
开发工具:
VISCALLc++6.0;
编程语言:
C语言。
5详细设计
1.声明数据类型
2.编写addlist函数生成随机无序数组
3.编写qipao函数实现冒泡排序,并输出排序移动次数和时间
4.编写insertSort函数实现插入排序,并输出排序移动次数和时间
5.编写SelectSort函数实现选择排序,并输出排序移动次数和时间
6.编写xierSort函数实现希尔排序,并输出排序移动次数和时间
7.编写MergeSort函数实现归并排序,并输出排序移动次数和时间
8.编写Main函数对子函数进行调用
6调试分析
在调试过程中出现的一些问题:
1、输入语句中没有加取地址符号&
2、误把取地址运算符&
当作逻辑与&
&
3、误把赋值=当恒等==
4、条件语句(if)后误加分号
5、循环语句中改变了循环变量
6、作为输出结果的变量没有赋初值
7.中英文输入切换导致符号错误
7测试结果
8参考文献
[1]谭浩强,C程序设计题解与上机指导(第3版),清华大学出版社,2005.7.
[2][美]HarveyM.Deitel,PaulJ.Deitel著,聂雪军,贺军译,C程序设计经典教程(第4版),清华大学出版社,2006。
3
[3]《数据结构(C语言版)》,严蔚敏、吴伟民,清华大学出版社,1997.
课程设计总结
通过本次课程设计,我学到了很多:
增强了查阅相关参考资料的能力;
独立分析解决问题的能力;
创新精神;
自己的上机动手的能力;
自己对课程设计的理解,得到很多启示,知道了以后要加强哪一方面,还有哪一方面有用,课程设计为我们提供了一个即动手又动脑、独立实践的机会,将课本上的知识理论和实际有机的结合起来,锻炼了我们的分析解决实际问题的能力。
提高离我们适应实际,实践编程的能力。
附录;
#include<
stdio.h>
stdlib.h>
string.h>
time.h>
#defineLIST_INIT_SIZE50000
intbj1,yd1,n;
clock_tstart_t,end_t;
typedefstruct
{intkey;
}ElemType;
{ElemType*elem;
intlength;
}SqList;
voidaddlist(SqList&
L)
{inti;
a:
printf("
请输入你要输入的个数:
"
);
scanf("
%d"
&
n);
if(n>
50000)
{printf("
超出范围重新输入!
!
\n"
gotoa;
}
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(0);
L.length=0;
for(i=1;
i<
n+1;
i++)
{b:
L.elem[i].key=rand();
if(L.elem[i].key>
30000)gotob;
++L.length;
//选择
voidSelectSort(SqList&
{start_t=clock();
inti,j,k,bj=0,yd=0;
L.length;
{k=i;
for(j=i+1;
j<
j++)
{bj++;
if(L.elem[j].key<
L.elem[k].key)k=j;
if(i!
=k)
{L.elem[0].key=L.elem[i].key;
L.elem[i].key=L.elem[k].key;
L.elem[k].key=L.elem[0].key;
yd+=3;
end_t=clock();
比较次数为%d移动次数为%d\n"
bj,yd);
排序用时为%f\n"
float(end_t-start_t)/CLK_TCK);
}
//起泡
voidqipao(SqList&
inti=1,j,bj=0,yd=0;
while(i<
L.length)
{for(j=1;
if(L.elem[j].key>
L.elem[j+1].key)
{L.elem[0].key=L.elem[j].key;
L.elem[j].key=L.elem[j+1].key;
L.elem[j+1].key=L.elem[0].key;
i++;
//直接插入
voidInsertSort(SqList&
inti,j,yd=0,bj=0;
for(i=2;
=L.length;
{
if(L.elem[i].key<
L.elem[i-1].key)
L.elem[0].key=L.elem[i].key;
yd++;
j=i-1;
bj++;
while(L.elem[0].key<
L.elem[j].key)
L.elem[j+1].key=L.elem[j].key;
j--;
//希尔
voidxier(SqList&
{
start_t=clock();
inti,d=L.length/2,j,w=0,k,yd=0,bj=0;
while(w<
d)
w=1;
for(i=w;
i=i+d)
k=i;
for(j=i+d;
j=j+d)
k=j;
w++;
d=d/2;
voidBeforeSort()
yd1=0,bj1=0;
voiddisplay(intm,intn)
m,n);
intPartition(SqList&
L,intlow,inthigh)//快速排序
intpivotkey;
L.elem[0]=L.elem[low];
yd1++;
pivotkey=L.elem[low].key;
while(low<
high)
while(low<
high&
L.elem[high].key>
=pivotkey)
--high;
L.elem[low]=L.elem[high];
bj1++;
L.elem[low].key<
++low;
L.elem[high]=L.elem[low];
L.elem[low]=L.elem[0];
returnlow;
voidQSort(SqList&
L,intlow,inthigh)
intpivotloc;
if(low<
pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);
QSort(L,pivotloc+1,high);
voidQuickSort(SqList&
BeforeSort();
QSort(L,1,L.length);
display(yd1,bj1);
voidMerge(ElemTypeR[],ElemTypeR1[],intlow,intm,inthigh)//归并
inti=low,j=m+1,k=low;
=m&
=high)
if(R[i].key<
=R[j].key)
R1[k]=R[i];
k++;
else
R1[k]=R[j];
j++;
=m)
while(j<
voidMergePass(ElemTypeR[],ElemTypeR1[],intlength,intn)
{inti=0,j;
while(i+2*length-1<
n)
{Merge(R,R1,i,i+length-1,i+2*length-1);
i=i+2*length;
if(i+length-1<
n-1)
Merge(R,R1,i,i+length-1,n-1);
for(j=i;
n;
R1[j]=R[j];
voidMSort(ElemTypeR[],ElemTypeR1[],intn)
{intlength=1;
while(length<
MergePass(R,R1,length,n);
length=2*length;
MergePass(R1,R,length,n);
voidMergeSort(SqList&
MSort(L.elem,L.elem,L.length);
intmain()
{SqListL;
addlist(L);
printf("
起泡排序:
\n"
qipao(L);
直插排序:
InsertSort(L);
选择排序:
SelectSort(L);
希尔排序:
xier(L);
快速排续:
QuickSort(L);
归并排序:
MergeSort(L);