为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数据结构各种排序算法的课程设计实验报告(c语言版)

2018-10-29 50页 doc 368KB 132阅读

用户头像

is_014457

暂无简介

举报
数据结构各种排序算法的课程设计实验报告(c语言版)数据结构各种排序算法的课程设计实验报告(c语言版) 滁州学院 课程名称: 数据结构 设计题目: 排序算法实现及比较 系 别: 计算机信息工程学院 专 业: 计算机科学与技术 组 别: 第*组 起止日期: 12 年 5 月 1 日 ~ 12 年 6月 1 日 指导教师: *** 计算机与信息工程学院二?一二年制 课程设计任务书 课程设计题目 排序算法实现将比较 组长 *** 学号 20****** 班级 *** 系别 计算机与信息工程学院 专业 计算机科学与技术 组员 *** 指导教师 *** ?加深对...
数据结构各种排序算法的课程设计实验报告(c语言版)
数据结构各种排序算法的课程实验(c语言版) 滁州学院 课程名称: 数据结构 设计题目: 排序算法实现及比较 系 别: 计算机信息工程学院 专 业: 计算机科学与技术 组 别: 第*组 起止日期: 12 年 5 月 1 日 ~ 12 年 6月 1 日 指导教师: *** 计算机与信息工程学院二?一二年制 课程设计任务书 课程设计题目 排序算法实现将比较 组长 *** 学号 20****** 班级 *** 系别 计算机与信息工程学院 专业 计算机科学与技术 组员 *** 指导教师 *** ?加深对常见排序算法理解 课程设计目的 ?通过程序比较常见算法优越性 ?熟悉加深对数据结构的了解及认识 课程设计所需环境 Windows xp;VC++6.0 ?实现常见排序算法程序化 课程设计任务要求 ?测试程序比较算法优越性 ?了解常见算法的实际应用 课程设计工作进度计划 序号 起止日期 工 作 内 容 分工情况 实验类容 1 分工 2 算法改编成程序 3 将子程序合并及调试 4 数据测试及 编写报告 5 指导教师签字: 年 月 日 系(教研室)审核意见: 系(教研室)主任签字: 年 月 日 目 录 1.引言 .......................................................................................................................................... 4 2.需求分析 ................................................................................................................................... 4 3.详细设计 ................................................................................................................................... 4 3.1 直接插入排序 .................................................................................................................. 4 3.2折半排序 .......................................................................................................................... 5 3.3 希尔排序 ......................................................................................................................... 6 3.4简单选择排序 ................................................................................................................... 6 3.5堆排序 ............................................................................................................................. 6 3.6归并排序 .......................................................................................................................... 7 3.7冒泡排序 .......................................................................................................................... 9 4.调试 .........................................................................................................................................10 5.调试及检验 ............................................................................................................................... 11 5.1 直接插入排序 ................................................................................................................. 11 5.2折半插入排序 .................................................................................................................. 11 5.3 希尔排序 ........................................................................................................................12 5.4简单选择排序 ..................................................................................................................12 5.5堆排序 ............................................................................................................................13 5.6归并排序 .........................................................................................................................14 5.7冒泡排序 .........................................................................................................................14 6.测试与比较 ...............................................................................................................................15 6.1调试步骤 .........................................................................................................................15 6.2结论 ................................................................................................................................16 7.实验心得与分析 ........................................................................................................................16 8.附录 .........................................................................................................................................17 8.1直接插入排序 ..................................................................................................................17 8.2折半插入排序 ..................................................................................................................18 8.3希尔排序 .........................................................................................................................20 8.4简单选择排序 ..................................................................................................................22 8.5堆排序 ............................................................................................................................23 8.6归并排序 .........................................................................................................................26 8.7冒泡排序 .........................................................................................................................29 8.8主程序 ............................................................................................................................30 1.引言 伴随着社会的发展,数据也变得越来越庞大。如何将庞大的数据进行很好的排序,使用户更加方便的查找资料,成了一件越来越重要的问题。对于程序员来说,这将是一个挑战。 经常查找资料的朋友都会知道,面对海量的资料,如果其查找的资料没有进行排序,那么其查找资料将会是一件非常痛苦的事情。针对这一问题,我们自此通过一个课程设计来解决它。 理论上排序算法有很多种,不过本课程设计只涉及到七种算法。这七种算法共包括:直接插入排序,折半插入排序,希尔排序,简单选择排序,堆排序,归并排序,冒泡排序。 本课程设计通过对这七种算法的运行情况进行对比,选择最优秀的算法来提供给用户。希望通过我们的努力能给用户解决一些问题,带来一些方便。 2.需求分析 本课程题目是排序算法的实现,由于各方面的原因,本课程设计一共要设计七种排序算法。这七种算法共包括:直接插入排序,折半插入排序,希尔排序,简单选择排序,堆排序,归并排序,冒泡排序。七种排序各有独到之处,因此我们要通过各种调试分析来比较其优劣长短。 为了小组分工的方便,我们特意把子函数写成Header File文件。这样操作不仅可以使小组分工更加简洁明了,还可以方便子函数的调用,更可以使写主函数时一目了然。 为了运行时的方便,我们将七种排序方法进行编号,其中1为直接插入排序,2为折半插入排序,3为希尔排序,4为简单选择排序,5为堆排序,6为归并排序,7为冒泡排序。通过这七种选项,可以让用户简单明了的去选择使用哪一种排序方法。 本课程就是通过对5组占用内存大小不同的数据调试来测试这七种算法运行的时间长短,从中选择面对不同大小的文件时,哪一种算法更为快捷。 软件环境本课程设计所用操作系统为Windows-XP操作系统,所使用的软件为Microsoft Visual C++ 6.0; 3.详细设计 3.1 直接插入排序 ?算法思想:直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到一个已排好序的有序中,从而得到一个新的、记录数增一的有序表。在自i-1起往前搜索的过程中,可以同时后移记录。整个排序过程为进行n-1趟插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 ?程序实现及核心代码的注释: 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'; 3.2折半排序 ?算法思想:由于折半插入排序的基本操作是在一个有序表中进行查找和插入,这个“查找”操作可利用折半查找来实现,由此进行的插入排序称之为折半插入排序。折半插入排序所需附加存储空间和直接插入排序相同,从时间上比较,这般插入排序仅减少了关键字间的比较次数,而记录的移动次数 不变。因此,这般插入排序的时间复杂度仍为O(n2)。 ?程序实现及核心代码的注释: void zb(FILE *fp) { //对顺序表作折半插入排序 for ( i = 1 ; i < r.length ; i++ ) { temp=r.base[i]; //将r.base[i]寄存在temp中 low=0; high=i-1; while( low <= high ) //在base[low]到key[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; //插入 } 3.3 希尔排序 ?算法思想:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。其中,子序列的构成不是简单的“逐段分割”,而是将分隔某个“增量”的记录组成一个子序列。 ?程序实现及核心代码的注释: for(k = 0; k < 10 ; k++) { m = 10 - k; for( i = m ; i < r.length; i ++ ) if(r.base[i] < r.base[i - m]) { temp = r.base[i]; //保存待插记录 for(j = i - m ; j >= 0 && temp < r.base[j]; j -= m) r.base[ j + m ] = r.base[j]; //记录后移,查找插入位置 r.base[ j + m ] = temp; //插入 } } 3.4简单选择排序 ?算法思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。 ?程序实现及核心代码的注释: for ( i = 0 ; i < r.length ; i++ ) { //i为排好序的数的下标,依次往后存放排 //好序的数 temp=r.base[i]; //将待放入排好序的数的下标的数保存 for( j = i,m = j +1 ; m < r.length ; m++) //找出未排序的数中最小的数的循环; if(r.base[j] > r.base[m]) j = m; r.base[i] = r.base[j]; //把下标为j的数与i数互换; r.base[j] = temp; } 3.5堆排序 ?算法思想:堆排序只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。将序列所存储的元素A[N]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉 树:树中任一非叶结点的元素均不大于(或不小于)其左右孩子(若存在)结点的元素。算法的平均时间复杂度为O(N log N)。 ?程序实现及核心代码的注释: void dp(FILE *fp) { for(i = r.length / 2;i >= 1 ; --i) //把r.base[1...r.length]建成大顶堆 HeapAdjust(r.base,i,r.length); for(i = r.length ;i >= 2 ; --i) { temp = r.base[1]; r.base[1] = r.base[i]; r.base[i] = temp; HeapAdjust(r.base,1,i-1); //将r.base[1...i-1]重新调整为大顶堆 } void HeapAdjust(char *r,int k,int m) { i=k; x=r[i]; j=2*i; //沿key 较大的孩子节点向下筛选 while(j<=m) //j为key较大的记录的下标 { if( (jr[j+1]) ) j++; if(x>r[j]) { //插入字符比当前的大,交换 r[i] =r[j]; i = j; j *= 2; } else //否则比较停止。 j = m + 1; } r[i] = x; //把字符x插入到该位置,元素插入实现 } 3.6归并排序 ?算法思想:先将相邻的个数为1的每两组数据进行排序合并;然后对上次归并所得到的大小为2 的组进行相邻归并;如此反复,直到最后并成一组,即排好序的一组数据。 ?程序实现及核心代码的注释: void merge(SqList6 r,int h ,int m ,int w ,SqList6 t) { //对相邻两组数据进行组合排序; int i,j,k; i = h ; j = m + 1; //j为合并的第二组元素的第一个数位置 k =h-1; // k为存入t中的数的位置; while((i <= m)&&(j <= w)) { //依次排列两组数据 k++; if(r.base[i] <= r.base[j]) //将第一组数据与第二组数据分别比较; t.base[k] = r.base[i++]; else t.base[k] = r.base[j++]; } if(i > m) //第一组数据先排完的情况 while(j <= w) t.base[++k]=r.base[j++]; else while(i <= m) t.base[++k]=r.base[i++]; } void tgb(int s,int n,SqList6 r,SqList6 t) { //对数据进行每组s个数的归并排序; int i=1; //i为要合并两组元素的第一个数位置; while(i<=(n-2*s+1)) { merge(r,i,i+s-1,i+2*s-1,t); //i+s-1为要合并的第一组元素的最后一 //数位置、i+2*s-1 为要合并的两组元素 //最后一个数位置; i=i+2*s; } if(i<(n-s+1)) //考虑n不能被s整除,如果余下的数少于 //2*s 但大于s,也就是余下的数不能凑成 //两组,凑一组有余,则把余下的数进行组 //合,并对其进行排序; merge(r,i,i+s-1,n,t); else //如果余下的数少于s,则余下的数进行组//合, 并进行排序; while(i<=n) t.base[i]=r.base[i++]; } void gb(FILE *fp) // 归并主函数; { n = r.length; SqList6 t; t.base=(char *) malloc(r.stacksize*sizeof(char)); //给待排序的数组t申请内存; while(s= i;j -- ) //从后往前依次两两比较,较小的被调换到前面 ; if(r.base[j+1] < r.base[j]) //比较相邻两个数,如果后面的小于前面的,向下执行; { temp = r.base[j+1]; //将后面的较小的数保存起来; r.base[j+1] = r.base[j]; //将前面的较大的数放在后面较小的数的位置; r.base[j] = temp; //将较小的数放在前面的较大的数的位置; } } 4.调试 检测主函数是否能够稳定运行(如图4-1): 图4-1 5.调试及检验 5.1 直接插入排序 输入字符并保存(如图5-1.1): 调用算法【1】处理文件(如图5-1.2): 处理结果(如图5-1.3): 图5-1.1 图5-1.2 图5-1.3 5.2折半插入排序 输入字符并保存(如图5-2.1): 调用算法【2】处理文件(如图5-2.2): 处理结果(如图5-2.3): 图5-2.1 图5-2.2 图5-2.3 5.3 希尔排序 输入字符并保存(如图5-3.1): 调用算法【3】处理文件(如图5-3.2): 处理结果(如图5-3.3): 图5-3.1 图5-3.2 图5-3.3 5.4简单选择排序 输入字符并保存(如图5-4.1): 调用算法【4】处理文件(如图5-4.2): 处理结果(如图5-4.3): 图5-4.1 图5-4.2 图5-4.3 5.5堆排序 输入字符并保存(如图5-5.1): 调用算法【5】处理文件(如图5-5.2): 处理结果(如图5-5.3): 图5-5.1 图5-5.2 图5-5.3 5.6归并排序 输入字符并保存(如图5-6.1): 调用算法【6】处理文件(如图5-6.2): 处理结果(如图5-6.3): 图5-6.1 图5-6.2 图5-6.3 5.7冒泡排序 输入字符并保存(如图5-7.1): 调用算法【7】处理文件(如图5-7.2): 处理结果(如图5-7.3): 图5-7.1 图5-7.2 图5-7.3 6.测试与比较 6.1调试步骤 ?在kcsj文本文件中随机输入一串字符串,然后保存下来并且复制备份在桌面上。运行程序,调用不算法去处理文件。用秒表计算从开始到结束所用的时间,并记录下来。 ?将文件夹中的kcsj文本文件删除,将桌面上的备份文件考入文件夹来代替原文件,以保障被操作数据的一致性。 ?用同样的方法依次测试七种算法所用的时间,并记录下来。 ?再将数据依次改变为占用内存大小为50KB 、100KB、200KB、512KB、1024KB的数字串,重复以上的操作。 ?将记录的数据(如表6-1)。 表6-1 同一文件不同算法处理的时间表 直接插入排折半插入排希尔排简单选择排堆排归并排冒泡排 序 序 序 序 序 序 序 50KB >1m 1.5s 0.2s 6.0s <0.1s <0.1s 6.1s 100KB >3m 5.5s 1.1s 23s <0.1s <0.1s 24s 200KB -- 20s 3.8s -- <0.1s <0.1s >1m 512KB -- >1m 14s -- <0.1s 0.1s >3m 1024KB -- >3m >1m -- 0.2s 0.3s >10m --:表示时间过长 6.2结论 通过实验结果的比较与分析我们发现:直接插入排序、冒泡排序、简单选择排序及折半插入排序是低效率的排序方式;所以我们实际编程重要尽可能的避免他们的出现;我们应该用较先进的归并排序及堆排序。 7.实验心得与分析 通过本次课程设计,我们小组的每个成员都学到了很多东西。首先要说的是我们的编程能力,在这一次的课程设计中我们的编程能力均得到了一定程度的提升。并且通过这次课程设计,我们更加熟悉了如何使用Header File文件。本次课程设计,让我们对于直接插入排序,折半插入排序,希尔排序,简单选择排序,堆排序,归并排序,冒泡排序等七种排序算法的思想有了进一步的认识,同时对七种算法的应用有了更进一步的掌握。通过这次课程设计,我们对于解决实际问题的能力有了进一步提高。最重要的是,这次课程设计大大的训练了我们的小组团队协作能力。通过这次课程设计我们小组各成员的团队协作能力都有了很大的提升。这种团队协作能力对于我们学编程的来说是极其重要的,同时也是必不可少的。 当然,我们写程序的时候遇到了很多困难。而且在程序调试过程中出现了很多错误与警告,不过在队员及老师的帮助下均得到了解决。当程序可以运行后,程序的运行过程中同样也也出现了很多错误,甚至出现了不兼容的情况。不过,后来在队员及老师的帮助下也均得到了解决。然而,我们的程序还有一点瑕疵让我们感到美中不足。那就是在归并算法运行过程中,当输入为9个字符时,排序结果会出现偶然误差。经过分析,我们认为这点是系统的问题。不过,这仍然是一点让我们感到遗憾的地方。 8.附录 8.1直接插入排序 #include #include #define Q 1000 typedef struct { 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,"%c",r.base); 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("ERROR"); return ; } 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,"%s",r.base); fclose(fp); free(r.base); } 8.2折半插入排序 #include #include #define Q 1000 typedef struct { char *base ; int stacksize ; int length; }SqList2; 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)) { fscanf(fp,"%c",r.base); 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("ERROR"); return ; } 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++ ) { temp=r.base[i]; low=0; 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,"%s",r.base); fclose(fp); free(r.base); } 8.3希尔排序 #include #include #define Q 1000 typedef struct { char *base ; int stacksize ; int length; }SqList3; void xe(FILE *fp) { SqList3 r; int i,j,k,m; char temp; r.length = 0; r.base=(char *) malloc(1000*sizeof(char)); r.stacksize = 1000; while(!feof(fp)) { fscanf(fp,"%c",r.base); 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("ERROR"); return ; } r.base = r.base + r.stacksize; r.stacksize += Q; } } r.length --; r.base --; r.base= r.base - r.length; for(k = 0; k < 10 ; k++) { m = 10 - k; for( i = m ; i < r.length; i ++ ) if(r.base[i] < r.base[i - m]) { temp = r.base[i]; for(j = i - m ; j >= 0 && temp < r.base[j]; j -= m) r.base[ j + m ] = r.base[j]; r.base[ j + m ] = temp; } } rewind(fp); fprintf(fp,"%s",r.base); fclose(fp); free(r.base); } 8.4简单选择排序 #include #include #define Q 1000 typedef struct { char *base ; int stacksize ; int length; }SqList4; void jd(FILE *fp) { SqList4 r; int i,j ,m; char temp; r.base=(char *) malloc(1000*sizeof(char)); r.stacksize = 1000; r.length = 0; while(!feof(fp)) { fscanf(fp,"%c",r.base); 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("ERROR"); return ; } r.base = r.base + r.stacksize; r.stacksize += Q; } } r.length --; r.base --; r.base= r.base - r.length; for ( i = 0 ; i < r.length ; i++ ) { temp=r.base[i]; for( j = i,m = j +1 ; m < r.length ; m++) if(r.base[j] > r.base[m]) j = m; r.base[i] = r.base[j]; r.base[j] = temp; } r.base[r.length] ='\0'; rewind(fp); fprintf(fp,"%s",r.base); fclose(fp); free(r.base); } 8.5堆排序 #include #include #define Q 1000 typedef struct { char *base ; int stacksize ; int length; }SqList5; void HeapAdjust(char *r,int s,int m); void dp(FILE *fp) { SqList5 r; int i,j; char temp,*k; r.length = 0; r.base=(char *) malloc(1000*sizeof(char)); r.stacksize = 1000; r.base += 1; while(!feof(fp)) { fscanf(fp,"%c",r.base); r.base++; r.length++; if(r.length == (r.stacksize - 1) ) { r.base= r.base - r.length - 1; r.base=(char *) realloc(r.base,(r.stacksize + Q) * sizeof(char)); if(!r.base) { printf("ERROR"); return ; } r.base = r.base + r.stacksize; r.stacksize += Q; } } r.length --; r.base --; r.base= r.base - r.length - 1; for(i = r.length / 2;i >= 1 ; --i) HeapAdjust(r.base,i,r.length); for(i = r.length ;i >= 2 ; --i) { temp = r.base[1]; r.base[1] = r.base[i]; r.base[i] = temp; HeapAdjust(r.base,1,i-1); } k = (char *) malloc((r.length+1)*sizeof(char)); for(i = r.length,j = 0; i >= 1; i--,j++) k[j] = r.base[i]; k[j]='\0'; rewind(fp); fprintf(fp,"%s",k); fclose(fp); free(k); free(r.base); } void HeapAdjust(char *r,int k,int m) { int i,j; char x; i=k; x=r[i]; j=2*i; while(j<=m) { if( (jr[j+1]) ) j++; if(x>r[j]) { r[i] =r[j]; i = j; j *= 2; } else j = m + 1; } r[i] = x; } 8.6归并排序 #include #include #define Q 1000 typedef struct { char *base ; int stacksize ; int length; }SqList6; void merge(SqList6 r,int h,int m,int w,SqList6 t) { int i,j,k; i = h; j = m + 1; k = h - 1; while((i <= m)&&(j <= w)) { k++; if(r.base[i] <= r.base[j]) t.base[k] = r.base[i++]; else t.base[k] = r.base[j++]; } if(i > m) while(j <= w) t.base[++k]=r.base[j++]; else while(i <= m) t.base[++k]=r.base[i++]; } void tgb(int s,int n,SqList6 r,SqList6 t) { int i=1; while(i<=(n-2*s+1)) { merge(r,i,i+s-1,i+2*s-1,t); i=i+2*s; } if(i<(n-s+1)) merge(r,i,i+s-1,n,t); else while(i<=n) t.base[i]=r.base[i++]; } void gb(FILE *fp) { SqList6 r; r.length = 0; r.base=(char *) malloc(1000*sizeof(char)); r.stacksize = 1000; r.base += 1; while(!feof(fp)) { fscanf(fp,"%c",r.base); r.base++; r.length++; if(r.length == (r.stacksize - 1) ) { r.base= r.base - r.length - 1; r.base=(char *) realloc(r.base,(r.stacksize + Q) * sizeof(char)); if(!r.base) { printf("ERROR"); return ; } r.base = r.base + r.stacksize; r.stacksize += Q; } } r.length --; r.base= r.base - r.length - 2; int i,j,n,s=1; n = r.length; SqList6 t; t.base=(char *) malloc(r.stacksize*sizeof(char)); while(s #include #define Q 1000 typedef struct { char *base ; int stacksize ; int length; }SqList7; void mp(FILE *fp) { SqList7 r; int i,j ,m; char temp; r.length = 0; r.base = (char *) malloc(1000*sizeof(char)); r.stacksize = 1000; while(!feof(fp)) { fscanf(fp,"%c",r.base); 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("ERROR"); return ; } r.base = r.base + r.stacksize; r.stacksize += Q; } } r.length --; r.base --; r.base= r.base - r.length; for( i=0; i < r.length ;i++ ) { m=1; for( j = r.length-2;j >= i;j -- ) if(r.base[j+1] < r.base[j]) { temp = r.base[j+1]; r.base[j+1] = r.base[j]; r.base[j] = temp; m = 0; } if( m ) break; } r.base[r.length] ='\0'; rewind(fp); fprintf(fp,"%s",r.base); fclose(fp); free(r.base); } 8.8主程序 #include #include"zj.h" #include"zb.h" #include"xe.h" #include"jd.h" #include"mp.h" #include"dp.h" #include"gb.h" void main() { FILE *fp; int sign; while(sign != 0) { printf("请选择:\n"); printf(" %6c [1]直接插入排序\n",' '); printf(" %6c [2]折半插入排序\n",' '); printf(" %6c [3]希尔排序\n",' '); printf(" %6c [4]简单选择排序\n",' '); printf(" %6c [5]堆排序\n",' '); printf(" %6c [6]归并排序\n",' '); printf(" %6c [7]冒泡排序\n",' '); printf(" %6c [0]退出\n",' '); printf("请输入:"); scanf("%d",&sign); if((fp=fopen("kcsj.txt","r+"))==NULL) { printf(" File open error!\n"); return; } switch(sign) { case 1: zj(fp); break; case 2: zb(fp); break; case 3: xe(fp); break; case 4: jd(fp); break; case 5: dp(fp); break; case 6: gb(fp); break; case 7: mp(fp); break; case 0: break; } printf("\n \n \n"); } } 评语: 评阅教师签名: 年 月 日 成 绩 下 面 是诗情画意的句子欣赏,不需要的朋友可以编辑删除!! 谢谢!!!!! 1. 染火枫林,琼壶歌月,长歌倚楼。岁岁年年,花前月下,一尊芳酒。水落红莲,唯 闻玉磬,但此情依旧。 2. 玉竹曾记凤凰游,人不见,水空流。 3. 他微笑着,在岁月的流失中毁掉自己。 4. 还能不动声色饮茶,踏碎这一场,盛世烟花。 5. 红尘嚣 浮华一世转瞬空。 6. 我不是我 你转身一走苏州里的不是我 。 7. 几段唏嘘几世悲欢 可笑我命由我不由天。 8. 经流年 梦回曲水边 看烟花绽出月圆。 9. 人生在世,恍若白驹过膝,忽然而已。然,我长活一世,却能记住你说的每一话。 10. 雾散,梦醒,我终于看见真实,那是千帆过尽的沉寂。 11. 纸张有些破旧,有些模糊。可每一笔勾勒,每一抹痕迹,似乎都记载着跨越千年 万载的思念。 12. 生生的两端,我们彼此站成了岸 。 13. 缘聚缘散缘如水,背负万丈尘寰,只为一句,等待下一次相逢。 14. 握住苍老,禁锢了时空,一下子到了地老天荒 15. 人永远看不破的镜花水月,不过我指间烟云 世间千年,如我一瞬。 16. 相逢一醉是前缘,风雨散,飘然何处。 17. 虚幻大千两茫茫,一邂逅,终难忘。相逢主人留一笑,不相识,又何妨。 18. 天下风云出我辈,一入江湖岁月催;皇图霸业谈笑间,不胜人生一场醉。 19. 得即高歌失即休,多愁多恨亦悠悠,今朝有酒今朝醉,明日愁来明日愁。 20. 直道相思了无益,未妨惆怅是清狂。 21. 看那天地日月,恒静无言;青山长河,世代绵延;就像在我心中,你从未离去,也从 未改变。 22. 就这样吧,从此山水不相逢。 23. 人天自两空,何相忘,何笑何惊人。 24. 既不回头,何必不忘。 既然无缘,何须誓言。 今日种种,似水无痕。 明夕何夕,君已 陌路。 25. 有缘相遇,无缘相聚,天涯海角,但愿相忆。有幸相知,无幸相守,苍海明月,天长地久。 26. 相见得恨晚,相爱的太慢,进退让我两难。缘过了远分,缘过了聚散,是否回头 就能够上岸 27. 天凉了,凉尽了天荒 地老了,人间的沧桑,爱哭了,这么难舍 心都空了,想放不能放。 天亮了,照亮了泪光 泪干了,枕边地彷徨 28. 心微动奈何情己远.物也非,人也非,事事非,往日不可追 29. 渺渺时空,茫茫人海,与君相遇,莫失莫忘。 30. 如果换我先开口,日子是否还一样细水长流 31. 也许是前世的姻 也许是来生的缘 错在今生相见 徒增一段无果的恩怨 32. 人道海水深,不抵相思半。海水尚有涯,相思渺无畔。 33. 醉眼看别人成双作对, 34. 无人处暗弹相思泪。 35. 终于为那一身江南烟雨覆了天下,容华谢后,不过一场,山河永寂。 36. 千秋功名,一世葬你,玲珑社稷,可笑却无君王命。 37. 凤凰台上凤凰游,负约而去,一夜苦等,从此江南江北,万里哀哭。 38. 嗟叹红颜泪、英雄殁,人世苦多。山河永寂、怎堪欢颜。 39. 风华是一指流砂,苍老是一段年华。 40. 夜雨染成天水碧。有些人不需要姿态,也能成就一场惊鸿。 41. 你要记得,紫檀未灭,我亦未去。 42. 谁在岁月里长长叹息。 43. 汉霄苍茫,牵住繁华哀伤,弯眉间,命中注定,成为过往。 44. 红尘初妆,山河无疆。 最初的面庞,碾碎梦魇无常,命格无双。 45. 江南风骨,天水成碧,天教心愿与身违。 46. 山河拱手,为君一笑 。 47. 如是颠簸生世亦无悔。 48. 荏苒岁月覆盖的过往,白驹过隙,匆匆的铸成一抹哀伤。 49. 那被岁月覆盖的花开,一切白驹过隙成为空白。 50. 褪尽风华,我依然在彼岸守护你。 51. 那些繁华哀伤终成过往, 52. 请不要失望,平凡是为了最美的荡气回肠。 53. 你的路途,从此不见我的苍老。 54. 长歌当哭,为那些无法兑现的诺言,为生命中最深的爱恋,终散作云烟。 55. 随你走在天际,看繁花满地。 56. 我自是年少,韶华倾负。 57. 你要记得,那年那月,垂柳紫陌洛城东。 58. 苍茫大地一剑尽挽破,何处繁华笙歌落。 59. 寄君一曲,不问曲终人聚散。 60. 谁将烟焚散,散了纵横的牵绊;听弦断,断那三千痴缠。61. 清风湿润,茶烟轻扬。重温旧梦,故人已去。 1. 水滴虽小,却可以折射出太阳的光彩。 2. 梦落三千尺愁深似海,繁华遗落散满地。记忆轮回里,我举杯,在奈何桥上满口饮尽。 3. 人生没有轮回,就像花,人活一世,花开一季、人生如花,花似梦。 4. 生活的苦涩和美好给了我对人生的领悟,如今,千山万水走遍,我发现自己再也不愿离开文学的蓝天,再也不愿离开那个让我痴迷的文学舞台。 5. 在烟雨红尘中,轻拾季节花瓣飘落的音符,组成美妙曲符,然后,倚在时光的路口,撷一缕明媚,许自己一份唯美的怀想,与快乐、浪漫相约,闲淡清欢。 6. 未经历坎坷泥泞的艰难,哪能知道阳光大道的可贵;未经历风雪交加的黑夜,哪能体会风和日丽的可爱;未经历挫折和磨难的考验,怎能体会到胜利和成功的喜悦。挫折,想说恨你不容易 7. 燕子斜飞人家,炊烟零乱,柳絮飘飘,弥漫了山里人家。 8. 这样知解自己的生命即使是心灵空荡我也无所畏惧 9. 中秋之曰不可能岁月明如水,偶然的暗淡,恰似镜子的背后之面,有所缺憾,人生才会是积翠如云的空濛山色。 10. 在经受了失败和挫折后,我学会了坚韧;在遭受到误解和委屈时,我学会了宽容;在经历了失落和离别后,我懂得了珍惜。 11. 曾经盛开的蔷薇,虽经风吹雨打,但和着微风,还有屡屡暗香飘过。 12. 我只希望,不管三年,五年,或是十年以后。某一天,我们相遇,还能相认,你大喊一声,我想死你了。那一刻,我定会泪流满面。我们是朋友,永远的朋友。 13. 最爱的未必适合在一起,相爱是让彼此做自己。 14. 时间断想,时间不断。流逝,像是水,可弯可直,像是风,可柔可刚。 15. 如果说人生是一望无际的大海,那么挫折则是一个骤然翻起的浪花。如果说人生是湛蓝的天空,那么失意则是一朵飘浮的淡淡的白云。 16. 云层雾气,缠着几户古木人家,清新自然,如诗如画。 17. 我喜欢你,只是一个现在;我爱你,却是一整个未来。 18. 夜雨染成天水碧。有些人不需要姿态,也能成就一场惊鸿。 19. 再大的风不会永不停息,在浓得雾不会经久不散,风息雾散仍是阳光灿烂。 20. 牵着时光的衣襟,走进芳菲五月,轻轻地将春光拥入怀中,于一抹素白流韵中,弹奏一曲江南的婉韵,把盏,将似水流年浅斟轻酌。 21. 我穿越轮回而来,在奈何桥相思盈袖,凄然守候。莫落泪,纵若水落三千尺东流,云动八万里西散,我依旧会化身城碟,翩翩起舞跨过奈何桥与你相会。 22. 如果我爱你,我就会理解你,通过你的眼睛去看世界。我能理解你,是因为我能在你身上看到我自己,在我身上也看到了你。 23. 似乎风在转向,送走了缓缓袭来的味道,又将刚刚溜走的风,静静地换回来。 24. 生活告诉我,童话只不过是小孩子幻想的游戏。 25. 人生就像穿着一件长满虱子的华丽睡袍,外表美丽,而内心却充满了干啊和恐慌。 26. 必须用另一种真实方式来代替时光里已经逝去的东西 27. 岁月,依一抹浅香于心间,看年华向晚,闻花香送暖。给时光一个浅浅的回眸;给自己一份微笑从容。沉淀,馨香;念起,温暖。 28. 人生的起起落落间,总会有一些情怀需要安静回味;总会有一些伤痛需要独自体会;总会有一段路需要一个人走;总会有一些事需要坦然面对。 29. 疏影横斜水清浅,暗香浮动月黄昏。 30. 心若没有栖息的地方,到哪里都是在流浪。 31. 今后,我会从尘世中的纷争走出,远离喧嚣,把岁月打磨成诗,让自己的文字静如睡莲,动如涟漪,无论何时都能描绘成美丽的水墨丹青。 32. 全是理智的心,恰如一柄全是锋刃的刀,它叫使用它的人手上流血。——泰戈尔 33. 我们都不擅长表达,以至于我们习惯了揣测。去肯定,去否定,反反复复,后来我们就变得敏感而脆弱。 34. 心心念念的往事、曾经深爱过的人、年少琐碎的过往,它们就像缠绕之间的一阵风,来的缱绻,去的时候让人来不及挽留。 35. 如果在乎的没有那么多,想要的没有那么多,生活便会简单得很多。 36. 在极度的喧嚣中,独自微笑独自平静是憾,落花是美的,淡淡的书香,淡淡的花香,淡淡的馨香。 37. 曾芬芳过的那片土地,幸福的花儿虽早已凋谢,只留下风雨吹打的痕迹。 38. 辗转半世红尘,缘去缘灭,空留满池伤痕。雨花迟落,霜雪纷飞,池水泛冰,已益处月的苍凉。 39. 一条古道,一匹瘦马,一个人影,被落日的余晖缓缓拉长。 40. 我们人生的大幕才刚刚拉启:刀光剑影,英雄本色;是非恩怨,儿女情常。 41. 我们要去流浪,虔诚地定格住每一寸记忆;我们要去成长,潇洒地忘却掉每一条纹路。 42. 嗅着昨日芬芳遗留的气息,寻寻觅觅,仍不见踪迹。邂逅了一场烟火,终还是那般凄凉。迷失的夜晚,点缀了无数颗孤单的星星,不知道那是否有属于我的一颗。 43. 像这样轻飘飘的日子和平平静静的心情,也算是生活中的一种享受吧。 44. 想着远方的你,绝美的笑容,只为你一个人展露,那一泓羞涩的笑容,悄悄。 45. 细碎的声音,如羞涩的蓓蕾,夜暮花影,轻浅六月,寂寂流年,拢一阙清绝,归隐在宋词里。 46. 夕阳沉落在海水深处却不见浪花翻滚,淡淡的只留下一个让人沉思的背影。落雨是晚风中的殇,带着晨曦的翘首滑落最后的伤痕!雨尽含羞,淡抹嫣红! 47. 无影击碎了泪水,岁月在那个光年划下的痕迹原来是一刀一刀地刻在了我的心上。 48. 我收拢了梦想的翅膀,我停却了信念的脚步,却再也作不回曾经的那一天。 49. 我宁愿用尽此生,为那些尘世的硝烟尘雾,潸然泪下,为菩提落花,为世间繁华。 50. 阳光依旧在,我们穿越光影,沿着历史的足迹继续前行,创造美好生活,走向美丽明天! 51. 洋溢着春日的微笑,坚强了外表,却虚伪了内心,脆弱了,是不敢触及的。 52. 也许,就在那一刻里,梦境还在,柔情亦在。 53. 一个人的戏,自己独自导演,诠释精彩。在剧中尽情释放着自己的喜怒哀乐。笑得凄然绝美;哭得肝肠寸断。 54. 但生命中被你刻上痕迹的那些岁月无法抹去。 55. 往事悠然一笑间,不必空忧。我们一路走来,只是为了告别往事,走入下一段风景。倘若让忧伤填补了生命的空白,就真的是亵渎了生命。 56. 人生只有回不去的过去,没有过不去的当下。上帝只会给你过得去的坎,再不好过的生活,再难过的坎,咬咬牙,也就过去了。 57. 我一直以为山是水的故事,云是风的故事,你是我的故事。可是却不知道,我是不是你的故事。 58. 生命并不是一场竞赛,而是一段旅程。如果你在途中一直都试图给他人留下深刻印象,超过别人,那你就浪费了这段旅程。 59. 比如新的朋友新的感情新的思绪我想要知道的 60. 我以为我已经将爱情忘记,将你忘记。可是有一天,我听到一首歌,我的眼泪就出来了。因为这首歌,我们曾一起听过。 61. 忍花开花落,云卷云舒,品人生似棋。 62. 我离开你这一种信仰又会以怎样全新的姿势去面临更深沉的挑战 63. 人生路,路迢迢,谁道自古英雄多寂寥,若一朝,看透了,一身清风挣多少。 64. 只有夕阳站在那里。灵魂像无数的雪花飘过,光明闪烁,渐渐清醒。 65. 终于为那一身江南烟雨覆了天下,容华谢后,不过一场,山河永寂。 66. 荏苒岁月覆盖的过往,白驹过隙,匆匆的铸成一抹哀伤。 67. 忘川水不枯,记忆不散;奈何桥不断,思卿不弃;今夕,彼岸花又放,佳期约又到,我轮回践约而来,等你归来。红尘路上,伊人在否? 68. 十年生死两茫茫,不思量,自难忘,千里孤坟,无处话凄凉,纵使相逢应不识,尘满面,鬓如霜。 69. 天空飘过一朵云,有时是晴,有时是阴。但白昼终归还是白昼。 70. 我知道回不去,但还是会想念会回忆会心疼到无法自拔。 71. 天空不曾留下鸟的痕迹,但是我已飞过、在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明。 72. 人生首先要是望远镜,看远;再就是显微镜,看细;接下来是放大镜,看透;其次是太阳镜,看淡;最后是哈哈镜,笑看生活。 73. 我不是公主,也不会有等待救赎我的王子。
/
本文档为【数据结构各种排序算法的课程设计实验报告&#40;c语言版&#41;】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索