6种排序的时间测试代码

double* CreatArray(int len) //创建长度为len的随机数组
{
	int i;
	double* p=(double*)malloc(sizeof(double)*len);
	
	srand(time(0));
	for (i=0;i<len;i++)
	{
		p[i]=1000.0*rand()/(RAND_MAX+1.0);
	}
	return p;
}

void PrintArray(double* a,int len)
{
	for (int i=0;i<len;i++)
	{
		printf("%7.3f ",a[i]);
	}
	printf("\n");
}

void CheckArray(double* a,int len) //检查数组中的值,是否是升序排列
{
	int i;
	for (i=1;i<len;i++)
	{
		if (a[i-1]>a[i])
			printf("error!\n");
	}
}

int cmpDouble(const void *x, const void *y)  //库函数中的快速排序函数使用qsort
{  
	return (*(double*)x > *(double*)y ? 1 : -1);  
} 

int main(void)
{
	struct timeval tBegin,tEnd;
	double time=0;
	double *a=NULL;
	int len=50000*1000;

	/*
	a=CreatArray(len);
	gettimeofday(&tBegin);
	BubbleSort_1(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("冒泡 1 排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);

	a=CreatArray(len);
	gettimeofday(&tBegin);
	BubbleSort_2(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("冒泡 2 排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);

	a=CreatArray(len);
	gettimeofday(&tBegin);
	BubbleSort_3(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("冒泡 3 排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);


	a=CreatArray(len);
	gettimeofday(&tBegin);
	SelectSort(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("选择排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);


	a=CreatArray(len);
	gettimeofday(&tBegin);
	InsertSort(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("插入排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);
*/



	a=CreatArray(len);
	gettimeofday(&tBegin);
	HeapSort(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("堆排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);

	
	a=CreatArray(len);
	gettimeofday(&tBegin);
	MergeSort_xunhuan(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("归并排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);


	a=CreatArray(len);
	gettimeofday(&tBegin);
	qsort(a, len, sizeof(a[0]), cmpDouble); 
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("库函数快速排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);


	a=CreatArray(len);
	gettimeofday(&tBegin);
	QuickSort_2(a,0,len-1);
	gettimeofday(&tEnd);
	time=tEnd.tv_sec-tBegin.tv_sec+(tEnd.tv_usec-tBegin.tv_usec)/1000000.0;
	printf("快速排序耗时%5.3lfs\n",time);
	CheckArray(a,len);
	free(a);	
	

	return 0;
}


由于vs中没有gettimeofday函数,下面是该函数的实现。

#ifndef UTC_TIME_STAMP_H_
#define UTC_TIME_STAMP_H_
#endif

#include <windows.h>
#include <sys/timeb.h>
#include <time.h>

#if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_)
struct timeval
{
	long tv_sec;
	long tv_usec;
};
#endif

static int gettimeofday(struct timeval* tv)
{
	union {
		long long ns100;
		FILETIME ft;
	} now;
	GetSystemTimeAsFileTime (&now.ft);
	tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);
	tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);

	return (0);
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值