代码拉取完成,页面将自动刷新
#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++];
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。