您的位置:首页 > 其它

随机生成100万个数,排序后保存在文件中

2013-08-20 22:22 309 查看
转自:http://blog.csdn.net/hackbuteer1/article/details/6574908

随机生成100万个数,存储在文件out1.txt中,使用内部排序完成,并重新储存在文件out2.txt中。

(一)使用STL中的qsort函数进行操作:

[cpp] view
plaincopy

#include "stdio.h"  

#include "string.h"  

#include "stdlib.h"  

#include "time.h"  

int a[1000000];  

void load(char filename[]) //写文件  

{  

    int i;  

    FILE *fp;  

    fp=fopen(filename,"w");  

    if(fp==NULL)  

    {  

        printf("cannot open file/n");  

        return;  

    }  

    for(i=0;i<1000000;i++)    

    fprintf(fp,"%d ",a[i]);     

}  

int cmp(const void *a, const void *b)  

{  

    return (*(int*)a)-(*(int*)b); //从小到大进行排序  

}  

void paixu()  

{  

    qsort(a,1000000,sizeof(int),cmp);  

}  

int main(void)  

{  

    int i;  

    char filename[20];  

    srand( (unsigned)time( NULL ) );         //初始化随机数  

    for(i=0;i<1000000;i++)                //打印出10个随机数  

        a[i]=rand();  

    strcpy(filename,"out1.txt");  

    load(filename);  

    paixu();//快速排序  

    strcpy(filename,"out2.txt");  

    load(filename);  

    system("pause");  

    return 0;  

}  

(二)递归实现qsort函数进行操作:

[cpp] view
plaincopy

#include "string.h"  

#include "stdlib.h"  

#include "stdio.h"  

#include "time.h"  

int a[1000000];  

void load(char filename[]) //写文件  

{  

    int i;  

    FILE *fp;  

    fp=fopen(filename,"w");  

    if(fp==NULL)  

    {  

        printf("cannot open file/n");  

        return;  

    }  

    for(i=0;i<1000000;i++)   

        fprintf(fp,"%d ",a[i]);    

}  

int partitions(int a[],int low,int high)     

{  

    int pivotkey=a[low];   //基准  

    while(low<high)  

    {  

        while(low<high && a[high]>=pivotkey)  

            --high;  

        a[low]=a[high];  

        while(low<high && a[low]<=pivotkey)  

            ++low;  

  

        a[high]=a[low];  

    }  

    a[low]=pivotkey;  

    return low;  

}     

void qsort(int a[],int low,int high)   //快速排序  

{  

    int pivotkey;  

    if(low<high)  

    {  

        //递归调用  

        pivotkey=partitions(a,low,high);  

        qsort(a,low,pivotkey-1);  

        qsort(a,pivotkey+1,high);  

    }  

}  

int main(void)  

{  

    int i;  

    char filename[20];  

    srand( (unsigned)time( NULL ) );         //初始化随机数  

    for(i=0;i<1000000;i++)                //打印出10个随机数  

        a[i]=rand();  

    strcpy(filename,"out1.txt");  

    load(filename);  

    qsort(a,0,1000000);  //快速排序  

    strcpy(filename,"out2.txt");  

    load(filename);  

    system("pause");  

    return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: