数据结构各种排序算法的课程设计实验报告(c语言版)
表6-1 同一文件不同算法处理的时间表
50KB 100KB 200KB 512KB 1024KB 直接插入排序 >1m >3m -- -- -- 折半插入排序 1.5s 5.5s 20s >1m >3m 希尔排序 0.2s 1.1s 3.8s 14s >1m 简单选择排序 6.0s 23s -- -- -- 堆排序 <0.1s <0.1s <0.1s <0.1s 0.2s 归并排序 <0.1s <0.1s <0.1s 0.1s 0.3s 冒泡排序 6.1s 24s >1m >3m >10m --:表示时间过长
6.2结论
通过实验结果的比较与分析我们发现:直接插入排序、冒泡排序、简单选择排序及折半插入排序
是低效率的排序方式;所以我们实际编程重要尽可能的避免他们的出现;我们应该用较先进的归并排序及堆排序。
7.实验心得与分析
通过本次课程设计,我们小组的每个成员都学到了很多东西。首先要说的是我们的编程能力,在这一次的课程设计中我们的编程能力均得到了一定程度的提升。并且通过这次课程设计,我们更加熟悉了如何使用Header File文件。本次课程设计,让我们对于直接插入排序,折半插入排序,希尔排序,简单选择排序,堆排序,归并排序,冒泡排序等七种排序算法的思想有了进一步的认识,同时对七种算法的应用有了更进一步的掌握。通过这次课程设计,我们对于解决实际问题的能力有了进一步提高。最重要的是,这次课程设计大大的训练了我们的小组团队协作能力。通过这次课程设计我们小组各成员的团队协作能力都有了很大的提升。这种团队协作能力对于我们学编程的来说是极其重要的,同时也是必不可少的。
当然,我们写程序的时候遇到了很多困难。而且在程序调试过程中出现了很多错误与警告,不过在队员及老师的帮助下均得到了解决。当程序可以运行后,程序的运行过程中同样也也出现了很多错误,甚至出现了不兼容的情况。不过,后来在队员及老师的帮助下也均得到了解决。然而,我们的程序还有一点瑕疵让我们感到美中不足。那就是在归并算法运行过程中,当输入为9个字符时,排序结果会出现偶然误差。经过分析,我们认为这点是系统的问题。不过,这仍然是一点让我们感到遗憾的地方。
16 / 33
数据结构各种排序算法的课程设计实验报告(c语言版)
8.附录
8.1直接插入排序
#include
char *base ; int stacksize ; int length;
}SqList1;
void zj(FILE *fp) {
SqList1 r;
int i,j; char temp,*p;
r.base=(char *) malloc(Q*sizeof(char));
r.stacksize = Q; r.length = 0;
while(!feof(fp))
{
fscanf(fp,\ r.base++; r.length++;
if(r.length == r.stacksize ) {
r.base= r.base - r.length;
r.base=(char *) realloc(r.base,(r.stacksize + Q) * sizeof(char)); if(!r.base) { }
printf(\return ;
17 / 33
数据结构各种排序算法的课程设计实验报告(c语言版)
r.base = r.base + r.stacksize; r.stacksize += Q;
}
}
r.length --; r.base --;
r.base= r.base - r.length;
for (i = 1 ; i < r.length ;++i ) for(j=0;j < i;++j) if(r.base[i] < r.base[j]) { temp = r.base[i]; for(i= i ;i > j; --i )
r.base[i] = r.base[i-1];
r.base[j] = temp;
}
r.base[r.length] ='\\0'; rewind(fp);
fprintf(fp,\ fclose(fp);
free(r.base);
}
8.2折半插入排序
#include
int length;
}SqList2;
18 / 33
数据结构各种排序算法的课程设计实验报告(c语言版)
void zb(FILE *fp) {
SqList2 r;
int i,j ,m, low, high; char temp;
r.base=(char *) malloc(1000*sizeof(char));
r.stacksize = 1000; r.length = 0;
while(!feof(fp))
{ } r.length --; r.base --;
r.base= r.base - r.length;
for ( i = 1 ; i < r.length ; i++ ) {
temp=r.base[i]; low=0;
19 / 33
fscanf(fp,\r.base++; r.length++;
if(r.length == r.stacksize ) { }
r.base= r.base - r.length;
r.base=(char *) realloc(r.base,(r.stacksize + Q) * sizeof(char)); if(!r.base) { }
r.base = r.base + r.stacksize; r.stacksize += Q;
printf(\return ;
数据结构各种排序算法的课程设计实验报告(c语言版)
high=i-1;
while( low <= high ) { m = (low+high)/2; if ( temp < r.base[m] ) high = m-1;
else
low = m+1; }
for( j=i-1; j>=high+1; --j )
r.base[j+1]= r.base[j]; r.base[high+1]=temp;
}
r.base[r.length] ='\\0'; rewind(fp);
fprintf(fp,\ fclose(fp); free(r.base);
}
8.3希尔排序
#include
int length;
}SqList3;
void xe(FILE *fp) {
SqList3 r; int i,j,k,m;
char temp;
20 / 33