<Fundamentals of Data Structures in C> 1.5 性能测量 习题5

将顺序查找函数的迭代程序(程序1-24)转换成等价的递归程序,测量其性能。


#include <stdio.h>
#include <time.h>

#define MAX_SIZE 10001
#define ITERATION 13

int seqsearch(int *,int,int);
int seqsearch2(int *,int,int);

int main(void){
	int n_size[] = {10,20,50,80,100,200,400,800,1000,2000,5000,8000,10000};
	long repeat[] = {50000000,20000000,10000000,10000000,10000000,
		3000000,2000000,600000,400000,200000,180000,160000,140000};
	int list[MAX_SIZE];
	double dur_time1[ITERATION],dur_time2[ITERATION];
	for(int i = 0;i < ITERATION;i++){
		for(int j = 0;j < n_size[i];j++)
			list[j] = j;
		int searchnum = n_size[i];
		int start,end;

		start = time(NULL);
		for(int k = 0;k < repeat[i];k++)
			seqsearch(list,searchnum,n_size[i]);
		end = time(NULL);
		dur_time1[i] = difftime(end,start) / repeat[i];

		start = time(NULL);
		for(int k = 0;k < repeat[i];k++)
			seqsearch2(list,searchnum,n_size[i]);
		end = time(NULL);
		dur_time2[i] = difftime(end,start) / repeat[i];
	}

	printf("Times of iteration versus recursion:\n");
	printf("%-10s%-20s%-20s\n","n","iteration/s","recursion/s");
	for(int i = 0;i < ITERATION;i++)
		printf("%-10d%-20.8e%-20.8e\n",n_size[i],dur_time1[i],dur_time2[i]);
}

int seqsearch(int list[], int searchnum, int n){
	int i;
	list[n] = searchnum;
	for(i=0;list[i] != searchnum;i++)
		;
	return ((i < n) ? i : -1);
}

int seqsearch2(int list[], int searchnum, int n){
	if (n < 0)
		return -1;
	else{
		if (list[n-1] == searchnum)
			return n-1;
		else
			seqsearch2(list,searchnum,n-1);
	}
}



运用管道输出到results.txt文档:

mytest.ext>results.txt

两种格式的输出结果如下:

Times of iteration versus recursion:
n         iteration/s         recursion/s         
10        2.00000000e-008     0.60000000e-007     
20        0.00000000e+000     1.00000000e-007     
50        1.00000000e-007     0.30000000e-006     
80        1.00000000e-007     0.40000000e-006     
100       0.20000000e-006     0.40000000e-006     
200       6.66666667e-007     6.66666667e-007     
400       1.00000000e-006     1.50000000e-006     
800       1.66666667e-006     3.33333333e-006     
1000      2.50000000e-006     5.00000000e-006     
2000      5.00000000e-006     1.00000000e-005     
5000      1.11111111e-005     2.77777778e-005     
8000      1.87500000e-005     4.37500000e-005     
10000     1.42857143e-005     5.71428571e-005     


Times of iteration versus recursion:
n         iteration/s         recursion/s         
10        0.00000002          0.00000006          
20        0.00000005          0.00000005          
50        0.00000020          0.00000020          
80        0.00000020          0.00000030          
100       0.00000030          0.00000040          
200       0.00000033          0.00000100          
400       0.00000050          0.00000200          
800       0.00000167          0.00000333          
1000      0.00000250          0.00000500          
2000      0.00000500          0.00001000          
5000      0.00001111          0.00002778          
8000      0.00001875          0.00004375          
10000     0.00002143          0.00005000          


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值