外部合并排序法
//对于数据量很大的或是文件太大的需要进行排序的可用直接合并排序法(适用于顺序存取文件)
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
void merge(ofstream& fp,ifstream& fp1,ifstream& fp2)
{
char n1,n2;
char txt1[40];
char txt2[40];
fp1>>n1;
fp2>>n2;
while(fp1.eof()==0&&fp2.eof()==0)
{
if(n1<=n2)
{
fp.put(n1);
fp.put(' ');
fp1>>n1;//直接读取下一个n1的数据
}
else
{
fp.put(n2);
fp.put(' ');
fp2>>n2;//
}
}
if(fp1.eof())//如果其中一个文件读取完毕,经判断后直接把另一个文件的数据全部放到文件中
{
while(!fp2.eof())
{
fp2>>n2;
fp.put(n2);
fp.put(' ');
}
}
else
if(fp2.eof())
{
while(!fp1.eof())
{
fp1>>n1;
fp.put(n1);
fp.put(' ');
}
}
}
int main()
{
char txt[40];
ofstream fp;
ifstream fp1,fp2;
ifstream f,f1,f2;
fp.open("data.txt",ios::out);
fp1.open("data1.txt",ios::in);
fp2.open("data2.txt",ios::in);
if(!fp.is_open())
cout<<"打开文件失败!"<<endl;
else
if(!fp1.is_open())
cout<<"打开文件1失败!"<<endl;
else
if(!fp2.is_open())
cout<<"打开文件2失败!"<<endl;
else
{
cout<<"数据排序中...."<<endl;
merge(fp,fp1,fp2);
cout<<"数据处理完毕!"<<endl;
}
fp.close();
fp1.close();
fp2.close();
return 0;
}