随机生成100万个数,存储在文件out1.txt中,使用内部排序完成,并重新储存在文件out2.txt中。
(一)使用STL中的qsort函数进行操作:
- #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函数进行操作:
- #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;
- }