#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#define MAXSIZE 100000 //生产随机数个数
void Quick_sort(int a[],int left,int right) //快速排序法
{
int i=left,j=right;
int center = a[(i+j)/2];
int tran;
while(i <= j)
{
while(a[i] < center)
{
i++;
}
while(a[j] > center)
{
j--;
}
if(i<=j)
{
tran = a[i];
a[i] = a[j];
a[j] = tran;
i++;j--;
}
}
if(left < j)
{
Quick_sort(a,left,j);
}
if(i < right)
{
Quick_sort(a,i,right);
}
}
void RWriteData(char *FileName, int size, int type) //写出随机生成数
{
int i,j;
FILE *fp;
srand((unsigned)time(NULL));
if ((fp=fopen(FileName, "w"))==NULL)
{
printf("No such file exist.");
exit (0);
}
if (type==1)
{
printf("\n------------------random integers----------------\n");
}
for (i=0;i<size;i++)
{
j=rand()%99999;
fprintf(fp,"%d ", j);
if (type==1)
{
printf("%d ",j);
}
}
printf("\n");
fclose(fp);
}
void GetData(char *FileName,int a[])
{
FILE *fp;
if ((fp=fopen(FileName, "r"))==NULL)
{
printf("No such file exist.");
exit (0);
}
else
{
int data,i=0;
while(fscanf(fp,"%d",&data)!= EOF )
{
a[i]=data;
i++;
}
}
fclose(fp);
}
void WriteData(char *FileName,int a[]) //存储数据
{
FILE *fp;
if((fp = fopen(FileName,"w"))==NULL)
{
printf("No such file exist.");
exit (0);
}
else
{
for(int i=0; i<MAXSIZE; i++)
{
fprintf(fp,"%d ",a[i]);
}
}
fclose(fp);
}
void StroeTime(char *FileName,double a,int i) //存储时间
{
FILE *fp;
if(i==1)
{
if((fp = fopen(FileName,"w"))==NULL)
{
printf("No such file exist.");
exit (0);
}
}
else
{
if((fp = fopen(FileName,"a"))==NULL)
{
printf("No such file exist.");
exit (0);
}
}
fprintf(fp,"%f\n",a);
fclose(fp);
}
int main()
{
int array[MAXSIZE];
double len_time;
_LARGE_INTEGER starttime,endtime;
double Freq; //计时器频率
_LARGE_INTEGER f; //计时器频率
QueryPerformanceFrequency(&f);
Freq=(double)f.QuadPart;
RWriteData("a.txt",MAXSIZE,1);
GetData("a.txt",array);
QueryPerformanceCounter(&starttime);
Quick_sort(array,0,MAXSIZE-1);
QueryPerformanceCounter(&endtime);
len_time=(endtime.QuadPart-starttime.QuadPart)/Freq;
StroeTime("c.txt",len_time,1);
printf("此次快速排序耗时%fs\n",len_time);
printf("------------------------快速排序后-----------------------------\n");
WriteData("b.txt",array);
GetData("b.txt",array);
QueryPerformanceCounter(&starttime);
Quick_sort(array,0,MAXSIZE-1);
QueryPerformanceCounter(&endtime);
len_time=(endtime.QuadPart-starttime.QuadPart)/Freq;
StroeTime("c.txt",len_time,2);
printf("排好序后再次快速排序耗时%fs\n",len_time);
}
运行结果
快速排序前
快速排序后
存储时间(单位,秒)