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

随机生成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;
}


你可能感兴趣的:(C++,c)