武汉理工大学《数据结构》课程论文中国好学长系列之小灰灰的爸爸.docx
- 文档编号:27919834
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:23
- 大小:127.67KB
武汉理工大学《数据结构》课程论文中国好学长系列之小灰灰的爸爸.docx
《武汉理工大学《数据结构》课程论文中国好学长系列之小灰灰的爸爸.docx》由会员分享,可在线阅读,更多相关《武汉理工大学《数据结构》课程论文中国好学长系列之小灰灰的爸爸.docx(23页珍藏版)》请在冰豆网上搜索。
武汉理工大学《数据结构》课程论文中国好学长系列之小灰灰的爸爸
附件1:
学号:
课程设计
题目
交换排序的设计与实现
学院
计算机科学与技术学院
专业
软件工程专业
班级
中国好学长系列
姓名
小灰灰的爸爸
指导教师
夏红霞
2013
年
元
月
25
日
课程设计任务书
学生姓名:
专业班级:
指导教师:
夏红霞工作单位:
计算机科学与技术学院
题目:
交换排序的设计与实现
初始条件:
理论:
学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;
实践:
软件工程系实验室提供计算机及软件开发环境。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、系统应具备的功能:
(1)随机产生1000个整数
(2)实现冒泡排序、双向冒泡排序和快速排序
(3)比较各种交换排序的优劣
2、数据结构设计;
3、主要算法设计;
4、编程及上机实现;
5、撰写课程设计报告,包括:
(1)设计题目;
(2)摘要和关键字(中文和英文);
(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、设计体会等;
(4)结束语;
(5)参考文献。
时间安排:
2013年元月21日-25日(第21周)
元月21日查阅资料
元月22日系统设计,数据结构设计,算法设计
元月23日-24日编程并上机调试,验收程序
元月25日撰写报告、提交报告
指导教师签名:
2013年元月21日
系主任(或责任教师)签名:
2013年元月21日
交换排序的设计与实现
摘要:
设计一个程序,要求能够产生1000个随机数,分别用冒泡排序、双向冒泡排序和快速排序三种方法对它们进行排序并比较各种交换排序法的优劣。
关键字:
随机数 交换排序 数据结构算法
abstract:
Designaprogram,cangenerate1000randomnumbers,respectivelyusingbubblesort,bidirectionalbubblesortandquicksortofthreemethodstosortthemoutandcomparedtheprosandconsofvariousexchangesort.
Keywords:
Randomnumbers Exchangesort DatastructureAlgorithm
1引言
1.1冒泡排序法
首先将第一个关键字和第二个关键字进行比较,若为逆序,则将两关键字交换,然后比较第二个和第三个关键字,依此类推,直至第n-1个和第n个关键字相比较,结果使最大的关键字被安置到最后一个位置上,此为一趟起泡排序。
然后开始第二趟起泡排序,其结果是将次大的关键字被安置到第n-1个位置上,以此类推,直至序列有序。
1.2双向冒泡排序法
双向冒泡排序法是在冒泡排序法的基础上改进的,首先它在将最大关键字安置在最后一个位置上后也将最小关键字安置在第一个位置,然后开始第二趟起泡排序,以此类推直至序列有序,由于它让序列的两个方向同时进行排序,故称双向冒泡排序。
1.3快速排序法
快速排序法是一种效率很高的排序方法,适用于排序问题的规模很大但对于稳定性不作要求的情况。
它的设计方法是分治法,基本思想是:
在待排序列中选择一个对象作为枢轴,然后进行一趟快速排序,将序列分割为两个子序列,一个子序列的所有对象都不大于枢轴,一个都不小于枢轴。
然后便对这两序列重复上面的操作,依此类推,直至所有对象都被确定了位置,即序列有序。
2需求分析
本系统应具有三个功能:
产生随机整数,对关键字进行排序和记录排序所比较和调换的次数。
2.1产生随机数产生随机数
系统要求产生1000个整数,故采用随机函数rand来实现,在主函数头文件中包含time.h和stdlib.h。
系统中采用srand函数来对随机函数rand进行初始化,产生的随机数用一维数组来存储。
2.2对关键字排序
用冒泡排序法、双向冒泡排序法和快速排序法分别对关键字排序
2.3比较三种交换排序的优劣
本实验要求比较三种交换排序的优劣,其主要评判标准是时间复杂度。
《数据结构》中理论的分析了它们排序所用时间,而此实验用具体数据论证。
3数据结构设计
3.1流程图
3.2算法设计
3.2.1产生1000个随机数
srand(time(NULL));//随机产生1000个1000以内的正整数
printf("随机产生1000个整数\n");
for(inti=0;i<1000;i++)
{
a[i]=rand()%1000;//保证产生的整数在1000内,并存于数组a[]
printf("%d",a[i]);
}
for(m=0;m<1000;m++)
{
b[m]=a[m];//将数组a[]复制到数组b[],c[]
c[m]=a[m];
}
3.2.2冒泡排序
对于n个关键字的起泡排序,共要进行n-1趟的排序,第i趟要对n-i+1个关键字进行排序,即key[0]到key[n-i],可知共有两层循环。
在每一次的排序中,都定义一个临时变量temp,用以作为关键字交换时的临时存储单元。
Voidbubble_sort(intarray[])//冒泡排序法排列1000个数并记录比较和调换次数
{
inttemp,i,j;
intm=0,p=0;
for(j=0;j<999;j++)
for(i=0;i<999-j;i++)
{
if(array[i]>array[i+1])
{
temp=array[i];
array[i]=array[i+1];
array[i+1]=temp;
++m;
}
++p;
}
printf("冒泡排序结果:
\n");
for(j=0;j<1000;j++)
{
printf("%d",array[j]);
}
printf("\n");
3.2.3记录冒泡排序法的对调次数与比较次数
printf("\n*****************************************************************************\n");
printf("\n\n\t\t冒泡排序的对调次数:
%d\n\n",m);
printf("\t\t冒泡排序的比较次数:
%d\n\n",p);
}
3.2.4双向冒泡排序
对于n个关键字的冒泡排序,共要进行n-1趟的排序,第i趟要对n-i+1个关键字进行排序,即key[0]到key[n-i],且每次正向排序后马上反向排序,可知共有两层循环。
在每一次的排序中,都定义一个临时变量t,用以作为关键字交换时的临时存储单元。
voidmaopao(intsource[],intn)//双向冒泡排序法排列1000个数并记录比较和调换次数
{
intstart=0,end=n-1;
inti,k=0,l=0;
while(start<=end)/*如果还有元素没有确定其位置*/
{
for(i=start;i { if(source[i]>source[i+1]) { intt; t=source[i]; source[i]=source[i+1]; source[i+1]=t; ++k; } ++l; } end--;/*找到最大数*/ for(i=end;i>start;i--)/*寻找剩余元素的最小元素*/ { if(source[i]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 武汉理工大学 课程 论文 中国 好学 系列 灰灰 爸爸