所有的限制,几乎都是从自己的内心开始的。
一. 前沿:
排序是数据结构中的一块难点,也是重点。熟练的掌握各种各样的排序算法是对每个编程人员的基本的要求。历年的考研还是期末考中,排序都占了比较大的比重。
二. 程序实现的功能:
本程序采用了各种不同的方法对同一个输入进行排序,且每一个元素其本身亦是一个结构体,又可以进行扩充,使其可以存储其他的相关的信息。在此我仅仅举了结构体本身只有一个元素的情况。
a) 采用的数据类型:
为了讨论的方便,本程序采用了复合型的结构体类型,且才用了静态线性表的形式,不能进行扩充,一旦空间开辟,就不能在扩充(注意)。
具体如下:typedef struct
基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。
先在各组内进行直接插人排序;然后,取第二个增量d2void quicksort(sqlist& l,int low,int high)
//快速排序。
if(lowgh]进行一次快速排序。
i=low;j=high;
dovoid heapsort(sqlist &l)
//建堆的过程。
for(i=>0;i--)
heapadjust(l,i,for(i=>1;i--)
t=heapadjust(l,1,i-1);
基本思想:堆排序利用了大根堆堆顶记录的关键字最大这一特征,使得在当前无序区中选取最大关键字的记录变得简单。先将初始文件r[1..
n]建成一个大根堆,此堆为初始的无序区。再将关键字最大的记录r[1](即堆顶)和无序区的最后一个记录r[n]交换,由此得到新的无序区r[1..n-1]和有序区r[n],且满足r[1..
n-1].keys≤r[n].key。
由于交换后新的根r[1]可能违反堆性质,故应将当前无序区r[1..n-1]调整为堆。然后再次将r[1..
n-1]中关键字最大的记录r[1]和该区间的最后一个记录r[n-1]交换,由此得到新的无序区r[1..n-2]和有序区r[n-1..n],且仍满足关系r[1..
n-2].keys≤r[n-1..n].
keys,同样要将r[1..n-2]调整为堆。
直到无序区只有一个元素为止。
void oesort(sqlist& l,int n)
//奇偶交换排序。
change=1;标志变量,若其为零,即两次更替的交换中都没有交换数据,即排序结束。
while(change)
change=0;
for(i=1;i排序。
if(>
t=change=1;
for(i=2;i
t=所有的限制,几乎都是从自己的内心开始的。
change=1;
算法过程:第一趟对序列中的所有奇数项i扫描,第二趟对序列中的所有偶数项i扫描。若ri] >r[i+1],则交换它们。
第三趟有对所有的奇数项,第四趟对所有的偶数项如此反复,直到整个序列全部排好序为止。
五.源程序:
#include ""
#include ""
#include ""
#define maxsize 5
typedef struct
void quicksort(sqlist l,int low,int high)
int i,j;
if(low
-j;if(i
break;
s=j;void heapsort(sqlist l)
int i,t;
for(i=>0;i--)
heapadjust(l,i,for(i=>1;i--)
t=heapadjust(l,1,i-1void oesort(sqlist l,int n)
int t,i,change;
change=1;
while(change)
change=0;
for(i=1;i
t=change=1;
for(i=2;i
t=change=1;
所有的限制,几乎都是从自己的内心开始的。
main()
int i,j,low,high,a[maxsize+1];
char ch;
sqlist l;
clrscr();
*)malloc(maxsize*sizeof(int));
if(!printf("overflow");
printf("please input five elements:");
for(i=1;iort(l,printf("the odered arry:")
for(i=1;i printf("%d ",printf(""); break; case 'q': low=1;high= quicksort(l,low,high); printf("the odered arry:") for(i=1;i printf("%d ",printf(""); break; case 'h': heapsort(l); printf("the odered arry:") for(i=1;i printf("%d ",printf(""); break; case 'e': oesort(l,printf("the odered arry:") for(i=1;i printf("%d ",printf(""); break; case 'o': exit(0); default: printf("error!write again!"); while(1); 六. 程序运行结果: 当你编译连接通过后,运行。 please input five elements: 回车后出现大括号内的部分。 welcome to use panweifeng's kechensheji s:shellsort q:quicksort h:heapsort e:oesort o:quit please input the way:}s 输入s回车后出现大括号内的部分。 the orignal array:6 4 5 8 3 the odered array:3 4 5 6 8 welcome to use panweifeng's kechensheji s:shellsort q:quicksort h:heapsort e:oesort o:quit please input the way:}q 输入q回车后出现大括号内的部分。 the orignal array:6 4 5 8 3 the odered array:3 4 5 6 8 welcome to use panweifeng's kechensheji 所有的限制,几乎都是从自己的内心开始的。 s:shellsort q:quicksort h:heapsort e:oesort o:quit please input the way:}h 输入h回车后出现大括号内的部分。 the orignal array:6 4 5 8 3 the odered array:3 4 5 6 8 welcome to use panweifeng's kechensheji s:shellsort q:quicksort h:heapsort e:oesort o:quit please input the way:}e 输入e回车后出现大括号内的部分。 the orignal array:6 4 5 8 3 the odered array:3 4 5 6 8 welcome to use panweifeng's kechensheji s:shellsort q:quicksort h:heapsort e:oesort o:quit please input the way:}r 输入r回车后出现大括号内的部分。 the orignal array:6 4 5 8 3 error!write again! welcome to use panweifeng's kechensheji s:shellsort q:quicksort h:heapsort e:oesort o:quit please input the way:}o 输入o回车后,将返回编辑窗口。 程序结束。七. 总结: 通过本课程设计,我们对比较流行的几种算法定有了一个比较详细的认识,集中的编写也便于记忆。但我们不能死扣这几种算法,要有自己的创新。 计科021:潘伟丰(200232225134计科021:潘伟丰第 1 页共 9 页所有的限制,几乎都是从自己的内心开始的。 山东建筑大学计算机科学与技术学院。课程设计说明书。题目 哈夫曼编 译码器。算术表达式求值演示。课程 数据结构课程设计。院 部 理学院。专业 信息与计算科学。班级 信计0x1 学生姓名 xx 学号 2006121 指导教师 完成日期 2008 7 4 目录。课程设计任务书一 i 课程设计任务书二 ii... 课程设计心得体会。因为已经不是第一次做课程设计,所以对过程很是了解。前期准备工作也做的很充足,所以整个过程不慌不乱,有条不紊。总而言之,程序编写过程中,算法思路清晰,但细节处处理粗糙导致走了很多弯路。老师不只一次提到数据结构强调的是算法思路,经过这次课程设计后,我更是有了进一步深切体会。包括我之前在... 合肥学院。计算机科学与技术系。课程设计的心得体会。2009 2010 学年第二学期。2010年6 月。通过这次课程设计我自学了拓扑排序,使我对其排序方法和应用有了更深刻的了解。对于数据结构如何用c语言表述有了更深刻的体会和了解。在用c语言表述数据结构时遇到了不小的困难。总是在编译时错误连篇无法运行,...数据结构课程设计报告格式new
数据结构与算法课程设计心得体会学习体会 35
数据结构与算法课程设计心得体会学习体会 31