6种排序的时间测试代码
2013-08-20 22:32
218 查看
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); }
相关文章推荐
- 测试程序代码运行时间源代码
- C++测试程序执行时间代码
- 测试代码运行时间
- java里测试时间代码
- 测试用指定块大小读取文件时间的代码
- 一段代码运行时间测试
- 测试代码执行时间
- php之关于时间的测试代码
- 今天有时间戳转换的需求,网上找了半天才找到相关代码,经测试有效,特作此笔记和大家分享
- 排列搜索 庞果网(C语言版,虽实现了,但未通过测试,时间超过3s,使用的是全排序方法,愿大神指导)
- 插入排序,归并排序,快速排序时间效率测试
- 测试java代码运行时间
- C# 中用stopwatch测试代码运行时间
- c语言测试代码运行时间
- java 测试代码的运行时间
- (C# 版描述)冒泡排序算法以及排序时间的测试 ---数据结构
- 测试Java代码的执行时间
- JAVA 测试程序代码运行时间
- Stopwatch 例子性能测试- 测试代码执行的时间
- yii 测试代码执行时间