课程设计 排序算法比较

发布 2022-10-01 22:12:28 阅读 6607

电子设计应用软件训练任务。

一 、训练任务。

1、protel 部分。

1) 熟练掌握protel 软件的使用;

2) 按要求绘制电路原理图和pcb 版图(能够用自动布线和手动布线相结合);

3) 能够按要求建立元件库和封装库。

2、软件设计部分。

按照给定的软件设计任务完成相应的软件设计(见软件设计任务部分)。

二、基本要求及说明。

1、protel 部分。

1) 电路原理图图纸尺寸按照给定的任务作相应的设置;

2) 电路原理图见protel 训练任务部分;

3) 按指定电路图在protel 99 中绘制原理图和印制板图;

4) 按照给定要求创建原理图器件和该器件的相应的封装(见protel训练任务部分)。查找资料, 按资料创建原理图中某一元件及其封装形式;

2、软件设计部分。

按软件设计要求实现相应的功能(见软件设计任务部分)

三、按照要求撰写总结报告。

成绩评定表。

软件设计部分。

一.题目分析。

利用随机函数产生n个随机整数,对这些数进行多种方法进行排序。

要求:至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。

统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

二.设计过程(程序流程图)

1.定义一个结构体类型的线性表,并将该线性表初始长度设置为0。

2.构造输入随机数并显示在界面上的函数和输出排序之后的数据函数,使排序前和排序后的结果能直观显示在屏幕上。

3.主函数调用直接插入排序函数,通过函数调用将随机数进行排序。流程图如图11所示。yn

ynyn

y图11 直接插入排序函数流程图。

3.主函数调用起泡排序函数,通过函数调用将随机数进行排序。流程图如图12所示。ny

nyny

n y图12起泡排序函数流程图。

4.主函数调用选择排序函数,通过函数调用将随机数进行排序。流程图如图13所示。ny

yyny

ny图13 选择排序函数流程图。

3.调试过程及结果。

1.开始时程序有许多错误,其中不乏一些低级错误,经过改正后错误明显减少,有几个错误花费了大量时间去修改,经过查资料,与同学**,最终程序正确。

图14 开始界面。

图15产生的随机数

图16 直接插入排序的时间。

图17 起泡排序的时间。

图18 选择排序的时间。

2.本程序使用了switch语句,break语句,for循环等语句。使用了函数调用,宏定义,结构体,和typedefine声明新类型。

四.结论。这次的课设让我学会了用不同排序方法通过其排序时间来比较其优良与否。通过先绘制流程图使我在编程时变得得心应手,并且能很好的理解程序。

在编程时要注意一些细节,犯一点错就会使程序出错,这将造成很大的麻烦。编程时注意一些细节会让我们事半功倍。

五、参考文献。

1 吴元斌。c语言程序设计简明教程,[m]北京理工大学出版社 2011

2 严蔚敏。吴伟民。 《数据结构(c语言版) 》m]北京: 清华大学出版社,2009

3 陈锐, 陈亚民。c语言入门与提高,[m]北京希望电子出版社 2011

4 罗朝盛。c语言程序设计。第2版,[m]科学出版社 2012

5 王洪海。c语言程序设计实验指导,[m]人民邮电出版社 2011

六.程序清单。

#include ""

#include ""

#include ""计时。

#define error 0

#define ok 1

#define overflow -2

#define maxsize 99999 //用户自己规定排序的数字的长度。

typedef int sequenlist;

typedef struct

int *r; /r[0]闲置。

int length; /顺序表的总长度。

sqlist;

/构造一个空线性表。

sequenlist initsqlist(sqlist &l

*)malloc(maxsize*sizeof(int分配存储空间。

if(! //存储分配失败。

初始长度为0

return ok;

/输入随机数并显示在界面上。

sequenlist scanfsqlist(int &n,sqlist &l

int i;

printf("请输入要排序的元素个数n: "

scanf("%d",&n);

for(i=1;i<=n;i++)

随机产生样本整数。

printf("");

printf(" 随机产生了%d个随机数,它们是:",n);

for(i=1;i<=n;i++)

printf("");

//存储线性表的长度。

return ok;

/下面为输出排序之后的数据函数。

sequenlist printfsqlist(int n,sqlist l

int i;

printf("数据个数:")输出数据个数。

printf("%d",printf("排序后的数据:(从左向右依次增大)");输出数据。

for(i=1;i<=n;i++)

printf("%7.2d ",printf("");

return ok;

/下面为直接插入排序函数。

sequenlist insertsort(sqlist &l

int i,j;

if(for(i=2;i<=

return ok;

/下面为起泡排序函数。

sequenlist bubblesort(sqlist &l

int i,j,t;

if(for(i=1;i<=

for(j=1;j<=

if(> 前面的数据》后面数据时。

数据结构课程设计 排序算法

排序算法。1 需求分析。输入部分 要求用户能从屏幕上格式化输入元素个数。系统将自动生成用户输入的元素个数,存储 性表list中。要求用户选择用插入排序 冒泡排序 选择排序及快速排序中的一种,然后程序根据用户的选择对线性表list从小到大进行排序。最终,输出排序结果。1.1插入排序。思路 设有一组关键...

算法课程设计

目录。1 问题描述第1页。2 算法分析第2页。3 伪 第5页。4 设计流程第6页。5 演示程序设计第8页。6 测试与结论第16页。7 设计过程遇到的问题 思考及解决方法 第17页。八 总结第17页。1 问题描述。八皇后问题是一个古老而著名的问题,它是回溯算法的典型例题。该问题是十九世纪德国著名数学家...

算法课程设计

当一个问题具有最优子结构性质时,根据其具体情况可以用动态规划算法或者贪心算法来求解。但当问题同时具有贪心选择性质时,贪心算法则通常会给出一个更简单 直观和高效的解法。贪心算法则通常会给出一个更简单 直观和高效的解法。贪心算法通过一系列的选择来得到一个问题的解,并且每次贪心选择都能将问题化简为一个更小...