C语言实现快速排序并对其进行计时

#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);
	
	
 }
 

运行结果

在这里插入图片描述
快速排序前
在这里插入图片描述
快速排序后
在这里插入图片描述

存储时间(单位,秒)
在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值