从两个文件读数据,排序后输出到新文件

文件"A"和文件“B"分别已经存放有按照递增顺序排好序的小数,请将两个文件中的数据读出来写到文件”C"中,并同样按照递增顺序存入文件之中。
目前想到的是设一个大数组,依次从A、B文件读入数据,然后对这个大数组排序,然后保存到C文件。
有一点不满意的是,数组有尺寸限制。

void bubble_sort(double *ar, int rcount);

void resortToFile(FILE *fp1, FILE *fp2, FILE *fp3, double *ar, int *rcount);


#define MAX_NUM 1000
//
int main(int argc, char *argv[])
{
    FILE *fp1, *fp2, *fp3;
    int rcount=0;
    double ar[MAX_NUM]={0.0};


    fp1 = fopen("l1.txt", "r");
    fp2 = fopen("l2.txt", "r");
    fp3 = fopen("output.txt", "w");

    resortToFile(fp1, fp2, fp3, ar, &rcount);
    

    if(fp1!=NULL)

        fclose(fp1);
    if(fp2!=NULL)
        fclose(fp2);
    if(fp3!=NULL)
        fclose(fp3);
    return(0);
}


//从fp1和fp2两个文件读入数据,生成数组,排序后输出到fp3,要

//排序方法用简单的冒泡算法

void resortToFile(FILE *fp1, FILE *fp2, FILE *fp3, double *ar, int *rcount)
{
    int nCount=0;
    double r1;
    int s1=0, s2=0;
    if((fp1!=NULL)&&(fp2!=NULL)&&(fp3!=NULL))
    {
        while((s1=fscanf(fp1, "%lf", &r1))!=EOF)
        {
            nCount++;
            *(ar+nCount-1)=r1;
        }
        while((s2=fscanf(fp2, "%lf", &r1))!=EOF)
        {
            nCount++;
            *(ar+nCount-1)=r1;
        }
        bubble_sort(ar, nCount);  //冒泡排序,数组作为参数,需要同时传递数组长度
        for(int i=0;i             fprintf(fp3, "%f\t", *(ar+i));
        *rcount=nCount;
    }
}

//对数组进行冒泡排序

void bubble_sort(double *ar, int rcount)
{
    int i=rcount-1, j=0;
    for(i=0;i     {
        for(j=rcount-1;j>i;j--)
        {
            if(*(ar+j)<*(ar+j-1))
            {
                double tmp = *(ar+j-1);
                *(ar+j-1)= *(ar+j);
                *(ar+j) = tmp;
            }
        }
    }
}


但是,感觉还不够完美。按道理,应该按序把A和B文件分别读出的数据,比较后写入C,再从A或B读取下一个数据,再比较,再保存...
例如 A:1.1  2.1  3.1
         B:1.8  2.9  3.0  3.6
那么,(1)分别从A读入1.1,从B读入1.8,把1.1写入C;
             (2)从A读入2.1,与上次从B读出的1.8比较后,1.8写入C;
             (3)从B读入2.9,与上次A读入的2.1比较后,2.1写入C;
             (4)...
感觉逻辑有点复杂,以后再说吧。

你可能感兴趣的:(C/CPP复习)