6种排序的时间测试代码

double* CreatArray(int len) //创建长度为len的随机数组
{
	int i;
	double* p=(double*)malloc(sizeof(double)*len);
	
	srand(time(0));
	for (i=0;ia[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 
#include 
#include 

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


你可能感兴趣的:(算法)