将两个文件的内容排序后输出到一个文件中
2017-10-30 19:49
260 查看
本文的排序使用的是快速排序,快排的实现原理不在讲解这里放个链接http://ahalei.blog.51cto.com/4767671/1365285
首先使用文件IO的API将两个文件放到数组里,利用快排将混合到数组中的内容排序,然后输出到目标文件中
//将两个文件输出到一个文件并排序
#include<stdio.h>
#include<stdlib.h>
void quick_sort(char *buff, int left, int right)
{
int i = left, j = right;
char temp;
if (i >= j)
{
return;
}
while(i < j)
{
while((buff[j] >= buff[left]) && (i < j))
{
j--;
}
while((buff[i] <= buff[left]) && (i < j))
{
i++;
}
if (i < j)
{
temp = buff[i];
buff[i] = buff[j];
buff[j] = temp;
}
}
temp = buff[left];
buff[left] = buff[i];
buff[i] = temp;
quick_sort(buff, left, i-1);
quick_sort(buff, j+1, right);
}
int main(int argc, const char *argv[])
{
FILE *fp1, *fp2, *dst;
if (argc < 3)
{
printf("users: ./a.out + filename + filename\n");
return 0;
}
if (NULL == (fp1 = fopen(argv[1], "r")))
{
perror("open failed\n");
return 0;
}
if (NULL == (fp2 = fopen(argv[2], "r")))
{
perror("open failed\n");
return 0;
}
if (NULL == (dst = fopen("./text", "w")))
{
perror("open failed\n");
return 0;
}
int i, c, sum = 0;
for(i = 0; EOF != (c = fgetc(fp1)); i++)
{
fputc(c, dst);
}
sum = i;
for(i = 0; EOF != (c = fgetc(fp2)); i++)
{
fputc(c, dst);
}
sum = sum + i;
fclose(dst);
fclose(fp1);
fclose(fp2);
dst = fopen("./text", "r");
char buff[sum];
i = 0;
while(EOF != (c = fgetc(dst)))
{
buff[i++] = c;
}
fclose(dst);
quick_sort(buff, 0, sum);
dst = fopen("./text", "w");
i = 0;
do
{
c = buff[i++];
fputc(c, dst);
}while(sum--);
fclose(dst);
return 0;
}
首先使用文件IO的API将两个文件放到数组里,利用快排将混合到数组中的内容排序,然后输出到目标文件中
//将两个文件输出到一个文件并排序
#include<stdio.h>
#include<stdlib.h>
void quick_sort(char *buff, int left, int right)
{
int i = left, j = right;
char temp;
if (i >= j)
{
return;
}
while(i < j)
{
while((buff[j] >= buff[left]) && (i < j))
{
j--;
}
while((buff[i] <= buff[left]) && (i < j))
{
i++;
}
if (i < j)
{
temp = buff[i];
buff[i] = buff[j];
buff[j] = temp;
}
}
temp = buff[left];
buff[left] = buff[i];
buff[i] = temp;
quick_sort(buff, left, i-1);
quick_sort(buff, j+1, right);
}
int main(int argc, const char *argv[])
{
FILE *fp1, *fp2, *dst;
if (argc < 3)
{
printf("users: ./a.out + filename + filename\n");
return 0;
}
if (NULL == (fp1 = fopen(argv[1], "r")))
{
perror("open failed\n");
return 0;
}
if (NULL == (fp2 = fopen(argv[2], "r")))
{
perror("open failed\n");
return 0;
}
if (NULL == (dst = fopen("./text", "w")))
{
perror("open failed\n");
return 0;
}
int i, c, sum = 0;
for(i = 0; EOF != (c = fgetc(fp1)); i++)
{
fputc(c, dst);
}
sum = i;
for(i = 0; EOF != (c = fgetc(fp2)); i++)
{
fputc(c, dst);
}
sum = sum + i;
fclose(dst);
fclose(fp1);
fclose(fp2);
dst = fopen("./text", "r");
char buff[sum];
i = 0;
while(EOF != (c = fgetc(dst)))
{
buff[i++] = c;
}
fclose(dst);
quick_sort(buff, 0, sum);
dst = fopen("./text", "w");
i = 0;
do
{
c = buff[i++];
fputc(c, dst);
}while(sum--);
fclose(dst);
return 0;
}
相关文章推荐
- C实现两个文件的内容输出到同一个屏幕
- 从两个文件读数据,排序后输出到新文件
- 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并 (按字母顺序排列), 输出到一个新文件C中
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- C++ Demo 001: 读取一个从命令行指定的文件,输出文件内容到显示器,并且给每一行输出添加一个行号
- 从文件中读入数据,排序并输出到另外一个文件中
- C++程序设计实验报告(十八)----从文件中读入数据,排序并输出到另外一个文件中
- 用mingw编译C++工程;程序里面的cout<<"aaa";cmd运行c++程序,aaa内容在控制台不显示,如何将aaa输出到控制台屏幕并将控制台内容写到一个文件中。
- linux 找出两个txt文件中内容不同的部分并输出
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?
- 讲两个txt文件中的内容装到一个txt文件中
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- awk把所有日期下的内容输出到同一个文件中
- 用cmd的FC命令 对比两个文件夹内容不同并将文件名输出到文件中
- Python 读取文件替换其中的内容并输出到一个新的文件内
- USTC机试——从一个文件中读出两个矩阵,求出其乘积将矩阵输出到另外一个文件中
- 读取文件中int数据并排序输出到另外一个文件
- 有两个磁盘文件“A"和”B",各存放一行字母,先要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“C"中去。