#include <stdio.h>
#include <stdlib.h>
#define N 10
void MergeSort(int a[], int n);
void MergePass(int x[], int y[], int s, int n);
void Merge(int c[], int d[], int l, int m, int r);
int main()
{
FILE *fp1, *fp2;
int input[N]={0};
int i;
fp1 = fopen("input3.txt", "r"); //打开输入文件input3.txt
if(fp1 == NULL)
{
printf("没有文件input3.txt\n");
exit(0);
}
//从fp1读取十个数到input[10]
fscanf(fp1, "%d %d %d %d %d %d %d %d %d %d", &input[0], &input[1], &input[2], &input[3], &input[4], &input[5], &input[6], &input[7], &input[8], &input[9]);
fclose(fp1); //关闭inpu3.txt
MergeSort(input, N);
fp2 = fopen("output3.txt", "w");
if(fp2 == NULL)
{
printf("没有文件output3.txt\n");
exit(0);
}
for(i=0; i<N; i++)
{
fprintf(fp2, "%d ", input[i]); //循环10次输出到fp2
}
fclose(fp2); //关闭output3.txt
return 0;
}
void MergeSort(int a[], int n)
{
int b[N];
int s = 1;
while(s<n)
{
MergePass(a, b, s, n); //合并到数组b
s += s;
MergePass(b, a, s, n); //合并到数组a
s += s;
}
}
void MergePass(int x[], int y[], int s, int n)//子数组长度为s
{
//合并大小为s的相邻子数组
int i = 0, j=0;
while (i<=n-2*s)
{
//合并大小为s的相邻2段子数组
Merge(x, y, i, i+s-1, i+2*s-1);
i = i+2*s;
}
//剩下的元素个数少于2s
if(i+s<n)
Merge(x, y, i, i+s-1, n-1);
else
for(j=i; j<=n-1; j++)
y[j] = x[j]; //把合并好的 赋给新数组y
}
void Merge(int c[], int d[], int l, int m, int r)
{
//合并c[l:m]和c[m+1:r]到d[l:r]
int i = l, j = m+1, k = l;
int q=0;
while((i<=m) && (j<=r))//当两个指针都没超过数组长度是循环
{
if(c[i]<=c[j])//把小的放入新的数组中
d[k++] = c[i++];
else
d[k++] = c[j++];
}
if(i>m)//当其中一个数组中没有元素后,将指针指向另一个数组
for(q=j; q<=r; q++)
d[k++] = c[q];
else
for(q=i; q<=m; q++)
d[k++] = c[q];
}
Hebing.zip_数组操作_文件操作
版权申诉
146 浏览量
2022-09-21
01:01:52
上传
评论
收藏 5KB ZIP 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- multisim1仿真运放及三极管电路应用经典电路multisim10仿真实例源文件合集(21个).zip
- 基于Android的Fragment+ViewPager实现滑屛切换界面应用设计与实现1(源码)
- tensorflow-2.9.3-cp38-cp38-win-amd64.whl
- tensorflow-gpu-2.9.3-cp38-cp38-win-amd64.whl
- 1716994562763661.750000.jpg
- tensorflow-gpu-2.9.2-cp38-cp38-win-amd64.whl
- FSA-火烈鸟搜索优化算法
- 幸运女生眷顾.html
- 送修改教程.zip
- java-选择排序.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈