冒泡法与选择法排序效率比较.docx
《冒泡法与选择法排序效率比较.docx》由会员分享,可在线阅读,更多相关《冒泡法与选择法排序效率比较.docx(14页珍藏版)》请在冰豆网上搜索。
冒泡法与选择法排序效率比较
课程设计
学号
班级
姓名
指导教师
2008年3月7日
课程设计任务书
一、课程设计题目:
冒泡法与选择法排序效率比较
二、课程设计工作自2008年3月3日至2008年3月10日止
三、课程设计容:
用C语言编写软件完成一下任务:
比较“冒泡排序”和“选择排序”两种排序方法。
完成同样的工作,一个算法的时间效率越高(使用的时间越少),越容易受欢迎。
假设算法的时间主要消耗在两个方面:
赋值运算,比较运算。
请用程序读取给定的数据(file24.txt,由教师提供)后,分别使用“冒泡排序”和“选择排序”两种方法进行排序,并分别统计出各自需要的“赋值运算次数”和“比较运算次数”,从而对它们的时间效率进行初步评价。
四、课程设计要求
1.程序质量:
●贯彻结构化的程序设计思想。
●用户界面友好,功能明确,操作方便。
●用户界面中的菜单至少应包括“读取数据”、“冒泡法排序”、“选择法排序”、“退出”4项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其容下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
————
学生签名:
________
一、需求分析
经过对程序题目的分析可知,整个程序分为四大部分。
每一部分对应一个函数。
它们的功能分别是:
文件装载(read);冒泡法排序(maopao);选择法排序(xuanze);效率比较主函数(main)。
1.文件装载函数实现装载所给文件,读取文件所给数值。
2.冒泡法排序函数主要实现数据的冒泡法排序和赋值运算与比较运算的次数。
3.选择法排序函数主要实现数据的选择法排序和赋值运算与比较运算的次数。
4.效率比较主函数实现冒跑法排序与选择法排序效率比较与界面显示。
二、程序流程图
1、冒泡排序法流程图
2、选择法排序流程图
3、文件装载流程图
4、排序效率比较模块的流程图
三、核心技术的实现说明及相应程序段
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单形式调用三个自定义函数来实现所有功能。
其中冒泡法排序函数与选择法排序函数是核心部分。
现分别进行说明:
1.文件装载函数
该函数用于打开指定文件,以便下面的程序段使用其中的数据.其过程是定义一个文件指针,并使之指向指定的文件,然后用fopen函数打开文件.这样文件就装载完毕.
具体程序段如下:
#include
structu
{intnum;
}u[10];
voidread()//声明read函数//
{
inti;
FILE*fp;
if((fp=fopen("d:
\\file24.txt","r"))==NULL)//打开文件“file24.txt”//
{
printf("文件打开失败\n");
return;
}
for(i=0;i<10;i++)//构成循环//
{
fscanf(fp,"%6d",&u[i].num);
}
fclose(fp);//关闭文件//
}
2.冒泡法排序函数
该函数对指定数据排序.通过两次循环,依次比较两相邻数据之后替换.直至循环完毕.这时排序完毕.具体函数段如下:
maopao()//冒泡法排序//
{
inti,j,t,a=0,b=0;
read();
for(j=0;j<9;j++)
{
for(i=0;i<9-j;i++)
{
if(u[i].num
{
t=u[i].num;
a++;
u[i].num=u[i+1].num;
a++;
u[i+1].num=t;
a++;
}
b++;
}
}
printf("冒泡法:
赋值运算%d次,比较运算%d次\n",a,b);
return(a+b);//返回运算次数//
}
3、选择法排序函数
该函数对指定数据排序.通过两次循环,比较之后替换.依次将最大或最小的数分别筛选出来.这时排序完毕.具体函数段如下:
xuanze()//选择法排序//
{
inti,j,t,a=0,b=0,min;
read();
for(j=10;j>0;j--)
{
min=j;
a++;
for(i=0;i<=j;i++)
{
if(u[i].num
{
min=i;
a++;}
}
b++;
t=u[min].num;
a++;
u[min].num=u[j].num;
a++;
u[j].num=t;
a++;
}
printf("选择法:
赋值运算%d次,比较运算%d次\n",a,b);
return(a+b);//返回运算次数//
}
四、个人总结
一个星期的课程设计结束了,在这几天的学习过程中我学到了很多,让我对C++和WORD的使用更加的了解和熟练。
在实践的过程中让我体会到了挫折与失败的滋味,同时也让我体会到了成功的喜悦。
在编写程序时遇到了很多的困难,但这些并不能阻止我要写好程序的决心,俗话说:
“只有功夫深,铁杵磨成针”。
在我不懈的努力和老师的帮助下,一个个困难被我征服,一个崭新的程序完成了。
看着程序的完成心里有说不出的高兴,那是成功的喜悦。
我相信通过这次实践我学到的所有知识将会收益终生。
五、参考文献
1谭浩强.C程序设计.:
清华大学,2005
2成等.C语言程序设计实验指导与习题集.:
中国铁道,2006
六、源程序
#include
structu
{intnum;
}u[10];
voidread()
{
inti;
FILE*fp;
if((fp=fopen("d:
\\file24.txt","r"))==NULL)
{
printf("文件打开失败\n");
return;
}
for(i=0;i<10;i++)
{
fscanf(fp,"%6d",&u[i].num);
}
fclose(fp);
}
maopao()
{
inti,j,t,a=0,b=0;
read();
for(j=0;j<9;j++)
{
for(i=0;i<9-j;i++)
{
if(u[i].num
{
t=u[i].num;
a++;
u[i].num=u[i+1].num;
a++;
u[i+1].num=t;
a++;
}
b++;
}
}
printf("冒泡法:
赋值运算%d次,比较运算%d次\n",a,b);
return(a+b);
}
xuanze()
{
inti,j,t,a=0,b=0,min;
read();
for(j=10;j>0;j--)
{
min=j;
a++;
for(i=0;i<=j;i++)
{
if(u[i].num
{
min=i;
a++;}
}
b++;
t=u[min].num;
a++;
u[min].num=u[j].num;
a++;
u[j].num=t;
a++;
}
printf("选择法:
赋值运算%d次,比较运算%d次\n",a,b);
return(a+b);
}
voidmain()
{
inti,a=0,b=0;
chare;
printf("----------------------------------------------------------------\n");
printf("----------------------------------------------------------------\n");
printf("-------------欢迎使用冒泡选择比较程序---------------\n");
printf("------------------l装载文件file24.txt--------------------\n");
printf("------------------a使用冒泡法排-------------------------\n");
printf("------------------b使用选择法排序----------------------\n");
printf("------------------c比较两种排序方法的效-------------\n");
printf("------------------q退出-------------------------------------\n");
printf("----------------------------------------------------------------\n");
for(;;)
{
scanf("%c",&e);
if(e=='l')
{
read();
printf("\nfile24.txt文件装载成功,其中数据为:
\n");
for(i=0;i<10;i++)
printf("%d,",u[i].num);
printf("\n");
}
elseif(e=='a')
{
a=maopao();
printf("数据排序成功,排序结果为:
\n");
for(i=0;i<10;i++)
printf("%d,",u[i].num);
printf("\n");
}
elseif(e=='b')
{
b=xuanze();
printf("数据排序成功,排序结果为:
\n");
for(i=0;i<10;i++)
printf("%d,",u[i].num);
printf("\n");
}
elseif(e=='c')
{
if(a
=0&&b!
=0)
printf("冒泡排序法效率高\n");
elseif(a>b&&a!
=0&&b!
=0)
printf("选择排序法效率高\n");
else
printf("请先运行两种排序方法\n");
}
elseif(e=='q')
{
printf("\n----------------------程序结束---------------------\n");
break;}
}
}