冒泡法与选择法排序效率比较

更新时间:2023-12-23 19:54:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

0 沈 阳 航 空 工 业 学 院 课程设计 学 号 班 级 姓 名 指导教师

沈阳航空工业学院

课程设计任务书

一、课程设计题目: 冒泡法与选择法排序效率比较

二、课程设计工作自2008年3月3日至2008年3月10日止 三、课程设计内容:

用C语言编写软件完成一下任务:

比较“冒泡排序”和“选择排序”两种排序方法。完成同样的工作,一个算法的时间效率越高(使用的时间越少),越容易受欢迎。假设算法的时间主要消耗在两个方面:赋值运算,比较运算。请用程序读取给定的数据(file24.txt,由教师提供)后,分别使用“冒泡排序”和“选择排序”两种方法进行排序,并分别统计出各自需要的“赋值运算次数”和“比较运算次数”,从而对它们的时间效率进行初步评价。

四、课程设计要求

1. 程序质量:

? 贯彻结构化的程序设计思想。

? 用户界面友好,功能明确,操作方便。 ? 用户界面中的菜单至少应包括“读取数据”、“冒泡法排序”、“选

择法排序”、“退出”4项。

? 代码应适当缩进,并给出必要的注释,以增强程序的可读性。 2. 课程设计说明书:

课程结束后,上交课程设计说明书(打印稿和电子稿),其内容下: ? 封面

? 课程设计任务书 ? 目录

? 需求分析(分析题目的要求)

? 程序流程图(总体流程图和主要功能模块流程图) ? 核心技术的实现说明及相应程序段 ? 个人总结 ? 参考资料

? 源程序及适当的注释 指导教师:———— 学生签名:________

沈 阳 航 院 设 计 用 纸

目录

一、需求分析 ............................................................ 1 二、程序流程图 ........................................................ 1 三、核心技术的实现说明及相应程序段 ............... 4 四、个人总结 ............................................................ 7 五、参考文献 ............................................................ 7 六、源程序 ................................................................ 7

I

沈 阳 航 院 设 计 用 纸

一、需求分析

经过对程序题目的分析可知,整个程序分为四大部分。每一部分对应一个函数。它们的功能分别是:文件装载(read);冒泡法排序(maopao);选择法排序(xuanze);效率比较主函数(main)。

1. 文件装载函数 实现装载所给文件,读取文件所

给数值。

2. 冒泡法排序函数 主要实现数据的冒泡法排序

和赋值运算与比较运算的次数。

3. 选择法排序函数 主要实现数据的选择法排序

和赋值运算与比较运算的次数。

4. 效率比较主函数 实现冒跑法排序与选择法排

序效率比较 与界面显示。

二、程序流程图 1、冒泡排序法流程图

1

沈 阳 航 院 设 计 用 纸

定义int i,j,t,a=0,b=0; 当j=0~8 当i=0~9-j if(stud[i].num < stud[i+1].num]) 是 否 交换stud[i].num < stud[i+1].num a+3,b+1 输出冒泡法:赋值运算a次,比较运算b次 反还a+b

2、选择法排序流程图

2

沈 阳 航 院 设 计 用 纸

定义int i,j,t,a=0,b=0,num=0; 当j=10~1 min=i;a++ 当i=0~j if(stud[i].num

for(i=0;i<10;i++) 读取std[i] 关闭文件

4、排序效率比较模块的流程图

3

沈 阳 航 院 设 计 用 纸

bs&&b!=0&&s!=0 冒泡排序法效率高 是 否 输出 输出 选择排序法效率高 请先运行两种排序方法 三、核心技术的实现说明及相应程序段

本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单形式调用三个自定义函数来实现所有功能。其中冒泡法排序函数与选择法排序函数是核心部分。现分别进行说明:

1.文件装载函数

该函数用于打开指定文件,以便下面的程序段使用其中的数据.其过程是定义一个文件指针,并使之指向指定的文件,然后用fopen函数打开文件.这样文件就装载完毕. 具体程序段如下:

4

#include struct u {int num; } u[10];

void read() // 声明read函数//

{

int i;

FILE *fp;

if((fp=fopen(\ //打开文件“file24.txt”// { printf(\文件打开失败\\n\ return; }

for(i=0;i<10;i++) //构成循环// { fscanf(fp,\ }

fclose(fp); //关闭文件//

}

2 .冒泡法排序函数

该函数对指定数据排序.通过两次循环,依次比较两相邻数据之后

替换.直至循环完毕. 这时排序完毕.具体函数段如下:

maopao() //冒泡法排序// {

int i,j,t,a=0,b=0;

read(); for (j = 0; j < 9; j++) { for (i = 0; i <9-j; i++) {

if (u[i].num < u[i+1].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\return(a+b); //返回运算次数// }

3、选择法排序函数

该函数对指定数据排序.通过两次循环,比较之后替换.依次将最大或最小的数分别筛选出来. 这时排序完毕.具体函数段如下:

xuanze() //选择法排序// {

int i,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

} b++; t=u[min].num; a++; u[min].num=u[j].num; a++; u[j].num=t; a++; }

printf(\选择法:赋值运算%d次,比较运算%d次\\n\ return(a+b); //返回运算次数//

}

四、个人总结

一个星期的课程设计结束了,在这几天的学习过程中我学到了很多,让我对C++和WORD的使用更加的了解和熟练。

在实践的过程中让我体会到了挫折与失败的滋味,同时也让我体会到了成功的喜悦。

在编写程序时遇到了很多的困难,但这些并不能阻止我要写好程序的决心,俗话说:“只有功夫深,铁杵磨成针”。

在我不懈的努力和老师的帮助下,一个个困难被我征服,一个崭新的程序完成了。

看着程序的完成心里有说不出的高兴,那是成功的喜悦。我相信

通过这次实践我学到的所有知识将会收益终生。

五、参考文献

1 谭浩强.C程序设计.北京:清华大学出版社,2005

2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006

六、源程序

#include struct u {int num;

} u[10];

void read() {

int i;

FILE *fp;

if((fp=fopen(\ { printf(\文件打开失败\\n\ return; }

for(i=0;i<10;i++)

{ fscanf(fp,\ }

fclose(fp); }

maopao() {

int i,j,t,a=0,b=0; read();

for (j = 0; j < 9; j++) { for (i = 0; i <9-j; i++) {

if (u[i].num < u[i+1].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\return(a+b); }

xuanze() {

int i,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

} b++; t=u[min].num; a++; u[min].num=u[j].num; a++; u[j].num=t; a++; }

printf(\选择法:赋值运算%d次,比较运算%d次\\n\ return(a+b); }

void main() {

int i,a=0,b=0; char e;

printf(\ printf(\ printf(\欢迎使用冒泡选择比较程序---------------\\n\ printf(\装载文件file24.txt--------------------\\n\ printf(\使用冒泡法排-------------------------\\n\ printf(\使用选择法排序----------------------\\n\ printf(\比较两种排序方法的效-------------\\n\ printf(\退出-------------------------------------\\n\ printf(\ for(;;)

{ scanf(\ if(e=='l') { read(); printf(\文件装载成功,其中数据为:\\n\ for(i=0;i<10;i++) printf(\ printf(\ } else if(e=='a') { a=maopao(); printf(\数据排序成功,排序结果为:\\n\ for(i=0;i<10;i++) printf(\ printf(\ } else if(e=='b') { b=xuanze(); printf(\数据排序成功,排序结果为:\\n\ for(i=0;i<10;i++) printf(\ printf(\ } else if(e=='c') { if(ab&&a!=0&&b!=0) printf(\选择排序法效率高\\n\ else printf(\请先运行两种排序方法\\n\ } else if(e=='q') {

printf(\程序结束---------------------\\n\ break;} } }

本文来源:https://www.bwwdw.com/article/7k65.html

Top