1 Star 0 Fork 0

zeyes/a

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
MergeSort.c 1.75 KB
一键复制 编辑 原始数据 按行查看 历史
zeyes 提交于 2015-06-30 11:34 +08:00 . 2015.06.30 11:34
#include <stdio.h>
#include <limits.h> /*INT_MAX支持*/
#define MAXN 100
#define MAX INT_MAX
void MergeSort(int a[], int p, int r);
void Merge(int a[], int p, int q, int r);
int main(void)
{
int i, n;
int ar[MAXN];
freopen("input.txt", "r", stdin); /*重定向文件到标准输入输出*/
freopen("output.txt", "w", stdout);
scanf("%d", &n); /*读取数据个数*/
for(i = 1; i <= n; i++) /*读取数据*/
{
scanf("%d", &ar[i]);
}
MergeSort(ar, 1, n); /*调用归并排序*/
for(i = 1; i <= n; i++) /*输出数据*/
{
printf("%d ", ar[i]);
if(i % 10 == 0) /*每行10个*/
putchar('\n');
}
return 0;
}
void MergeSort(int a[], int p, int r)
{
int q;
if(p < r)
{
q = (p + r) / 2; /*分治策略*/
MergeSort(a, p, q); /*递归 不断将数组分成两部分,直到没法分*/
MergeSort(a, q + 1, r);
Merge(a, p, q, r);
}
}
void Merge(int a[], int p, int q, int r)
{
int i, j, k;
int m[q - p + 2]; /*变长数组(VLA)*/
int n[r - q + 1]; /*C99特性:GCC编译需加-std=c99*/
for(i = 0; i < q - p + 1; i++) /*将前a[p...q]复制到临时数组*/
m[i] = a[p + i];
for(j = 0; j < r - q; j++) /*将前a[q+1...r]复制到临时数组*/
n[j] = a[q + 1 + j];
m[i] = n[j] = MAX; /*定义为无穷大的数*/
i = j = 0;
for( k = p; k <= r; k++) /*两组已经有序的数据开始排序,合成一组*/
{
if(m[i] > n[j])
a[k] = n[j++];
else
a[k] = m[i++];
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/zeyes/a.git
git@gitee.com:zeyes/a.git
zeyes
a
a
master

搜索帮助