# 排序算法从入门到精通之九--性能测试

 数据个数 1百万 2百万 4百万 希尔排序 164 413 920 归并排序 79 160 329 快速排序 73 176 435

 数据个数 1百万 2百万 4百万 希尔排序 165 410 939 归并排序 71 145 309 快速排序 72 172 436

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "sorts.h"

typedef void (*lpfn_sort_t)(ELE_TYPE arr[], int len);

extern void test_bubble_sort();
extern void test_select_sort();
extern void test_insert_sort();
extern void test_shell_sort();
extern void test_quick_sort();
extern void test_merge_sort();
extern void test_heap_sort();

void perf_test(ELE_TYPE *arr, int len, lpfn_sort_t fun, const char *fun_name )
{
long start,end;

start=get_millisecond();
fun(arr,len);
end=get_millisecond();
printf("Did %s on %d element spend %d ms\n", fun_name,len, end-start);
}

void all_sort_fun_perf_test()
{
ELE_TYPE *src=NULL;
ELE_TYPE *arr=NULL;
int i;

src=(ELE_TYPE*)malloc(MAX_LEN*sizeof(ELE_TYPE));
arr=(ELE_TYPE*)malloc(MAX_LEN*sizeof(ELE_TYPE));

srand(time(NULL));
for (i=0;i<MAX_LEN;i++)
src[i]=rand() % MAX_LEN;

memcpy(arr,src,sizeof(ELE_TYPE)*MAX_LEN);
perf_test(arr, MAX_LEN, shell_sort, "shell sort" );

memcpy(arr,src,sizeof(ELE_TYPE)*MAX_LEN);
perf_test(arr, MAX_LEN, merge_sort, "merge sort" );

memcpy(arr,src,sizeof(ELE_TYPE)*MAX_LEN);
perf_test(arr, MAX_LEN, quick_sort, "quick sort" );

memcpy(arr, src, sizeof(ELE_TYPE)*MAX_LEN);
//perf_test(arr, MAX_LEN, heap_sort, "heap sort");

free(src); src=NULL;
free(arr); arr=NULL;
}

int main(int argc, char* argv[])
{
//test_bubble_sort();
//test_select_sort();
//test_insert_sort();
//test_merge_sort();

printf("------------------------\n");
all_sort_fun_perf_test();
return 0;
}



﻿﻿
﻿﻿