外排序 就是比如说你在文件中你有很大的数组 你无法一起加载到内存中 只能一部分一部分的加载带内存中,然后对它进行排序,他的思想就是 我先分为几份,然后对每一份先排序,排完序后我再进行归并排序,具体步骤程序都标注明白了 。请看程序注释就可以 拿过来直接就可以跑
另外 快速排序在这里就不给了 上一篇已经给了
void _mergefile(const char* file1, const char* file2, const char* mergefile)
{
FILE* fout1 = fopen(file1, "r");
if (fout1 == NULL)
{
printf("文件打开失败n");
exit(-1);
}
FILE* fout2 = fopen(file2, "r");
if (fout2 == NULL)
{
printf("文件打开失败n");
exit(-1);
}
FILE* fin = fopen(mergefile, "w");
if (fin == NULL)
{
printf("文件打开失败n");
exit(-1);
}
//读取1 2 文件的数据 然后进行归并排序把他们放入到merfefile文件中
int num1, num2;
int ret1 = fscanf(fout1, "%dn", &num1);
int ret2 = fscanf(fout2, "%dn", &num2);
while (ret1 != EOF && ret2 != EOF)
{
if (num1 < num2)
{
fprintf(fin, "%dn", num1);
ret1 = fscanf(fout1, "%dn", &num1);
}
else
{
fprintf(fin, "%dn", num2);
ret2 = fscanf(fout2, "%dn", &num2);
}
}
while (ret1 != EOF)
{
fprintf(fin, "%dn", num1);
ret1 = fscanf(fout1, "%dn", &num1);
}
while (ret2 != EOF)
{
fprintf(fin, "%dn", num2);
ret2 = fscanf(fout2, "%dn", &num2);
}
fclose(fout1);
fclose(fout2);
fclose(fin);
}
void mergesortfile(const char* file)
{
FILE* fout = fopen(file, "r");
if (file == NULL)
{
printf("文件打开失败n");
exit(-1);
}
//打开文件后要读取里面的数据
int num = 0;
int a[10];//把整个文件平分 使每一个小文件先承载10个数据
int i = 0;
int n = 10;
char subfile[20];
int filei = 1;
while (fscanf(fout, "%dn", &num)!=EOF)
{
if (i < n - 1)
{
a[i] = num;
i++;
}
else
{
a[i] = num; //之前读了9个 现在再加上一个 为10个 不能在上面



