归并排序(分治法)
2016-04-17 11:03
309 查看
Merge Sort
原始数据使用随机函数生成。 采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。 数据个数由宏定义给出,也可以轻松地改为输入。 原始数据使用随机函数生成。 采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。 数据个数由宏定义给出,也可以轻松地改为输入。
排序时需要一个与数据规模相等的辅助存储。
原始数据使用随机函数生成。 采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。 数据个数由宏定义给出,也可以轻松地改为输入。 原始数据使用随机函数生成。 采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。 数据个数由宏定义给出,也可以轻松地改为输入。
排序时需要一个与数据规模相等的辅助存储。
/* * * 归并排序算法程序 * */ #include <stdio.h> #include<stdlib.h> #include <time.h> //#define DEBUG #define N 7 void getData(int [], int); void outputData(int [], int); void mergesort(int a[], int temp[], int low, int high); void merge(int a[], int temp[], int low, int middle, int high); int main(void) { int a , temp ; getData(a, N); /* 获得数据放入数组a中 */ printf("Unordered datas: "); outputData(a, N); mergesort(a, temp, 0, N - 1); printf("In sorted order: "); outputData(a, N); return 0; } void mergesort(int a[], int temp[], int low, int high) { int middle; if(low < high) { middle = (low + high) / 2; #ifdef DEBUG printf("In sorted order: "); outputData(a, N); printf("middle=%d\n",middle); #endif mergesort(a, temp, low, middle); mergesort(a, temp, middle+1, high); merge(a, temp, low, middle, high); } } void merge(int a[], int temp[], int low, int middle, int high) { int i = low, j=middle+1, k = low; while(i <= middle && j <= high) { if(a[i] < a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while(i <= middle) temp[k++] = a[i++]; while(j <= high) temp[k++] = a[j++]; for(i=low; i<=high; i++) a[i] = temp[i]; } void getData(int d[], int n) { time_t t; srand((unsigned) time(&t)); /* 设置随机数起始值 */ int i; for(i=0; i < n; i++) d[i] = rand() % 1000; /* 获得0-999之间的整数值 */ } void outputData(int d[], int n) { int i; for (i = 0; i < n; i++) printf("%d ", d[i]); printf("\n"); }
相关文章推荐
- leetcode 75. Sort Colors
- SqlServer2012 ID自增需要插入指定值处理
- 算法课本~冒泡排序算法程序
- MySQL中MAX函数与Group By一起使用的注意事项
- 20145326 《Java程序设计》第7周学习总结
- 神经网络 neural network
- Storm集群启动与停止脚本及其注意事项
- Android MVC模式
- 什么是bug
- linux nmon 安装配置
- Android adb shell学习心得(二)
- ECMAScript基础
- 在ListView中显示分类字母标题
- Git常用命令总结(超实用)
- HDU5667 sequence 递推求值 (矩阵快速幂)
- c#面试1(选择题)
- 了解mongodb
- linux configure 参数详解
- JSP的3个编译指令,7个动作指令,9个内置对象
- 栈