第十六周上机实践项目1 - 验证算法(归并排序)
2015-12-14 16:34
423 查看
问题及代码:
运行结果:
/* .*Copyright(c)2015,烟台大学计算机与控制工程学院 .*All rights reserved. .*文件名称:test.cpp .*作者:颜肖璇 .*完成日期:2015年12月14日 .*版本号:v1.0 .*问题描述: 用序列{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}作为测试数据,运行并本周视频中所讲过的算法对应程序, 观察运行结果并深刻领会算法的思路和实现方法。 *输入描述: *程序输出: */
#include <stdio.h> #include <malloc.h> #define MaxSize 20 typedef int KeyType; //定义关键字类型 typedef char InfoType[10]; typedef struct //记录类型 { KeyType key; //关键字项 InfoType data; //其他数据项,类型为InfoType } RecType; //排序的记录类型定义 void Merge(RecType R[],int low,int mid,int high) { RecType *R1; int i=low,j=mid+1,k=0; //k是R1的下标,i、j分别为第1、2段的下标 R1=(RecType *)malloc((high-low+1)*sizeof(RecType)); //动态分配空间 while (i<=mid && j<=high) //在第1段和第2段均未扫描完时循环 if (R[i].key<=R[j].key) //将第1段中的记录放入R1中 { R1[k]=R[i]; i++; k++; } else //将第2段中的记录放入R1中 { R1[k]=R[j]; j++; k++; } while (i<=mid) //将第1段余下部分复制到R1 { R1[k]=R[i]; i++; k++; } while (j<=high) //将第2段余下部分复制到R1 { R1[k]=R[j]; j++; k++; } for (k=0,i=low; i<=high; k++,i++) //将R1复制回R中 R[i]=R1[k]; } void MergePass(RecType R[],int length,int n) //对整个数序进行一趟归并 { int i; for (i=0; i+2*length-1<n; i=i+2*length) //归并length长的两相邻子表 Merge(R,i,i+length-1,i+2*length-1); if (i+length-1<n) //余下两个子表,后者长度小于length Merge(R,i,i+length-1,n-1); //归并这两个子表 } void MergeSort(RecType R[],int n) //自底向上的二路归并算法 { int length; for (length=1; length<n; length=2*length) //进行log2n趟归并 MergePass(R,length,n); } int main() { int i,n=10; RecType R[MaxSize]; KeyType a[]= {9,8,7,6,5,4,3,2,1,0}; for (i=0; i<n; i++) R[i].key=a[i]; printf("排序前:"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("\n"); MergeSort(R,n); printf("排序后:"); for (i=0; i<n; i++) printf("%d ",R[i].key); printf("\n"); return 0; }
运行结果:
相关文章推荐
- 通用虚拟机连接外网配置
- CentOS6.2编译llvm3.7.0
- pts dts yin shi pin tong bu
- Formal System-表达逻辑归结原理(Aussagenlogik-Resolutionskalkül)
- 浅谈压缩感知(五):单像素相机
- 3D数学 ---- 矩阵和线性变换
- git使用命令整理
- Git异常:fatal: V1.0 cannot be resolved to branch.
- play framework
- contine 与 break 的区别
- 第十六周——【项目1 - 验证算法】
- 第十六周项目1(4)-快速排序
- 第十四周 项目2 “知原理”题目检验
- maven工程整合SpringMVC和mybatis和Spring过程中遇到的所有问题记录
- 第15周项目3 - B-树的基本操作
- 浅谈压缩感知(四):恢复算法
- 浅谈压缩感知(三):几何解释
- C#读取中文,但输出乱码
- favicon.ico图标访问不到的解决方案
- 九宫格布局