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

原创 2018年04月14日 23:28:39

该文对几种较快的排序算法做了性能测试。测试的算法包括希尔排序,归并排序和快速排序。由于冒泡排序,插入排序,选择排序速度较慢,我们这里没有给出数据。

所有几种算法在同一个程序中运行,使用同样的数据。通过修改宏MAX_LEN的值,我们对数据规模为1百万,2百万和4百万分别做的测试。 我们做了2轮测试,第一轮测试中,归并排序中调用merge_v1, 第二轮测试中归并排序调用merge_v2_asm. 下面是测试结果。

第一轮测试结果。对于每种规模的数据测试4次,取后3次的平均值,时间单位为毫秒

数据个数 1百万 2百万 4百万
希尔排序 164 413 920
归并排序 79 160 329
快速排序 73 176 435
第二轮测试结果。对于每种规模的数据测试4次,取后3次的平均值,时间单位为毫秒
数据个数 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;
}





软件测试的组织与管理

软件测试的组织与管理 (本文转载自软件工程专家网www.21cmm.com)    作为软件开发的重要环节,软件测试越来越受到人们的重视。随着软件开发规模的增大、复杂程度的增加,以寻找软件中的错误为目...
  • gigix
  • gigix
  • 2002-03-12 09:56:00
  • 2349

runtime从入门到精通(九)—— 万能界面跳转

由于文章篇幅长度原因,笔者单独用一篇文章来介绍使用runtime来实现万能控制器跳转。查看完整的runtime在实际开发中的使用点击链接 ——> runtime从入门到精通(六)—— runtime在...
  • coyote1994
  • coyote1994
  • 2016-09-08 16:16:34
  • 883

java直接选择排序算法

package 数组排序算法; //数组冒泡排序算法 //作者:陈桂豪 //算法来源:java从入门到精通6章5.1 public class 直接排序算法 { public static void ...
  • kongqisocool
  • kongqisocool
  • 2018-02-03 16:54:47
  • 26

asp.net从入门到精通第三版光盘全部内容

asp.net从入门到精通第三版光盘
  • qq_22973115
  • qq_22973115
  • 2016-10-03 18:05:16
  • 2701

HTML、CSS、JavaScript网页制作从入门到精通

这大概是我第一次写博客吧,自从大一开始写代码,至今也有5年的光景了,很遗憾并没有养成写博客的习惯,一方面因为我平时很少有阶段性的总结,另一面也确实不知道该分享些什么。归根结底还是功夫不到家,没有一些让...
  • luchengbing0120
  • luchengbing0120
  • 2017-09-19 19:42:28
  • 842

《linux C从入门到精通》 xx科技

这类书的题目简直是噱头, 明明就只是入门而已, 谈何精通? 而且这些书都鲜有作者自己的思考, 无非就是拿网上的东西进行复制粘贴而已, 没有什么营养价值。 makefile那一张, 从网上拷贝了不少东西...
  • stpeace
  • stpeace
  • 2016-11-19 12:30:11
  • 3597

《Unity5.X从入门到精通》配套资源网盘下载

  • 2016年08月23日 15:04
  • 122B
  • 下载

Visual C++从入门到精通第三版.pdf

  • 2014年02月27日 20:14
  • 43.54MB
  • 下载

SQL Server从入门到精通

  • 2016年10月30日 01:01
  • 202.96MB
  • 下载

Oracle+11g+从入门到精通——光盘源码

  • 2017年02月04日 00:48
  • 38KB
  • 下载
收藏助手
不良信息举报
您举报文章:排序算法从入门到精通之九--性能测试
举报原因:
原因补充:

(最多只允许输入30个字)