• swap(&a[i], &a[j]) 和 swap(&a[j],&a[j+1]) 那个快?


    应该说内存地址连续第访问, cache命中率会高一些,那么swap(&a[j],&a[j+1]) 应该更快,而且要快得多

    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    #include <string.h>
    #include <time.h>
    #include <unistd.h>
    #include <sys/time.h>
    
    void init(int *num, size_t len)
    {
    	int i;
    	for(i = 0; i<len; i++){
    		num[i] = rand() % 1000;
    	}
    }
    void print(int *num, size_t len)
    {
    	int i, n=1;
    	for(i = 0; i<len; i++)
    		printf("%4d%s", num[i], n++%30 == 0 ? "\n" : "");
    	puts("");
    
    }
    void bubble(int *num, size_t len)
    {
    	int i, j, temp;
    	for(i = 0; i<len - 1; i++)
    		for(j=i+1; j<len; j++)
    			if(num[i] > num[j])
    				temp = num[i], num[i] = num[j], num[j] = temp;
    }
    
    void bubble2(int *num, size_t len)
    {
    	int i, j, temp;
    	for(i = 0; i< len-1; i++)
    		for(j=0; j<len-1-i; j++)
    			if(num[j] > num[j+1])
    				temp = num[j], num[j] = num[j+1], num[j+1] = temp;
    }
    int main(int argc, char *argv[])
    {
    	void (*fun[2])(int *, size_t) = {bubble, bubble2};
    	int num[200];
    	int num2[200];
    	int len = sizeof(num)/sizeof(num[0]);
    
    	long diff1, diff2, sum1 = 0, sum2 = 0;
    
    	printf("%-10s%-10s%s\n", "bubble", "bubble2", "rate");
    	puts("---------------------------");
    	int i;
    	for(i = 0; i < 300; i++){
    	//  init num[] num2[]
    		struct timeval tv1, tv2;
    		gettimeofday(&tv1, NULL);
    		srand(tv1.tv_usec);
    		init(num,len); 
    		memcpy(num2, num, sizeof(num));
    	// --------------------------
    		gettimeofday(&tv1, NULL);
    		fun[0](num, len);
    		gettimeofday(&tv2, NULL);
    
    		diff1 = (tv2.tv_sec - tv1.tv_sec) * 1000 * 1000 + tv2.tv_usec - tv1.tv_usec;
    	// --------------------------
    
    	// --------------------------
    		gettimeofday(&tv1, NULL);
    		fun[1](num2, len);
    		gettimeofday(&tv2, NULL);
    
    		diff2 = (tv2.tv_sec - tv1.tv_sec) * 1000 * 1000 + tv2.tv_usec - tv1.tv_usec;
    		printf("%-10ld%-10ld%5.1f%%\n", diff1, diff2, diff1*100.0/diff2); 
    		sum1 += diff1, sum2 += diff2;
    	// --------------------------
    	}
    	puts("---------------------------");
    	printf("%-10ld%-10ld%5.1f%%\n", sum1, sum2, sum1*100.0/sum2);
    	return 0;
    }
    

      输出:

    bubble    bubble2   rate
    ---------------------------
    277       293        94.5%
    269       286        94.1%
    280       291        96.2%
    273       294        92.9%
    267       282        94.7%
    274       287        95.5%
    264       283        93.3%
    277       6366        4.4%
    271       284        95.4%
    265       282        94.0%
    269       500        53.8%
    276       296        93.2%
    274       289        94.8%
    270       283        95.4%
    278       295        94.2%
    281       299        94.0%
    285       300        95.0%
    273       288        94.8%
    280       297        94.3%
    284       291        97.6%
    274       288        95.1%
    272       286        95.1%
    278       298        93.3%
    274       287        95.5%
    11982     290       4131.7%
    285       302        94.4%
    274       292        93.8%
    279       297        93.9%
    275       293        93.9%
    284       301        94.4%
    272       9280        2.9%
    278       290        95.9%
    280       293        95.6%
    277       291        95.2%
    275       296        92.9%
    275       289        95.2%
    277       301        92.0%
    266       281        94.7%
    280       298        94.0%
    286       297        96.3%
    283       293        96.6%
    278       9401        3.0%
    274       296        92.6%
    279       298        93.6%
    282       293        96.2%
    277       300        92.3%
    271       286        94.8%
    275       287        95.8%
    278       296        93.9%
    273       288        94.8%
    275       293        93.9%
    274       294        93.2%
    271       3879        7.0%
    279       292        95.5%
    268       289        92.7%
    275       289        95.2%
    276       294        93.9%
    279       296        94.3%
    281       298        94.3%
    278       300        92.7%
    276       288        95.8%
    274       523        52.4%
    272       285        95.4%
    273       285        95.8%
    276       289        95.5%
    276       291        94.8%
    279       296        94.3%
    276       294        93.9%
    277       288        96.2%
    286       299        95.7%
    274       290        94.5%
    276       291        94.8%
    280       2536       11.0%
    271       286        94.8%
    280       292        95.9%
    279       292        95.5%
    279       293        95.2%
    276       293        94.2%
    273       293        93.2%
    277       292        94.9%
    278       287        96.9%
    277       293        94.5%
    277       291        95.2%
    270       288        93.8%
    281       636        44.2%
    279       295        94.6%
    271       295        91.9%
    273       291        93.8%
    273       292        93.5%
    267       283        94.3%
    276       294        93.9%
    274       288        95.1%
    278       293        94.9%
    280       295        94.9%
    833       286       291.3%
    268       286        93.7%
    282       329        85.7%
    278       292        95.2%
    269       284        94.7%
    276       293        94.2%
    276       288        95.8%
    286       297        96.3%
    275       287        95.8%
    267       287        93.0%
    280       293        95.6%
    271       289        93.8%
    272       291        93.5%
    284       297        95.6%
    272       291        93.5%
    281       300        93.7%
    357       292       122.3%
    278       295        94.2%
    269       288        93.4%
    264       281        94.0%
    271       288        94.1%
    277       378        73.3%
    280       298        94.0%
    270       287        94.1%
    283       293        96.6%
    279       958        29.1%
    268       288        93.1%
    281       293        95.9%
    317       297       106.7%
    274       288        95.1%
    265       283        93.6%
    276       2696       10.2%
    280       302        92.7%
    273       294        92.9%
    266       280        95.0%
    280       295        94.9%
    271       286        94.8%
    277       494        56.1%
    274       291        94.2%
    270       289        93.4%
    271       289        93.8%
    278       291        95.5%
    274       289        94.8%
    280       299        93.6%
    277       289        95.8%
    267       284        94.0%
    261       588        44.4%
    279       293        95.2%
    265       287        92.3%
    272       287        94.8%
    274       323        84.8%
    275       287        95.8%
    286       296        96.6%
    279       297        93.9%
    271       289        93.8%
    282       300        94.0%
    269       287        93.7%
    272       282        96.5%
    274       290        94.5%
    270       292        92.5%
    274       286        95.8%
    273       287        95.1%
    286       300        95.3%
    272       286        95.1%
    279       299        93.3%
    278       298        93.3%
    274       287        95.5%
    269       290        92.8%
    282       294        95.9%
    285       303        94.1%
    280       299        93.6%
    281       298        94.3%
    312       290       107.6%
    275       294        93.5%
    271       290        93.4%
    263       283        92.9%
    279       290        96.2%
    385       298       129.2%
    280       290        96.6%
    282       291        96.9%
    269       288        93.4%
    275       295        93.2%
    277       291        95.2%
    274       289        94.8%
    269       280        96.1%
    276       294        93.9%
    274       293        93.5%
    271       287        94.4%
    270       287        94.1%
    270       283        95.4%
    285       376        75.8%
    285       296        96.3%
    278       296        93.9%
    266       280        95.0%
    269       290        92.8%
    271       288        94.1%
    280       301        93.0%
    286       301        95.0%
    269       595        45.2%
    273       289        94.5%
    280       298        94.0%
    262       276        94.9%
    269       285        94.4%
    272       287        94.8%
    331       302       109.6%
    283       296        95.6%
    272       283        96.1%
    282       296        95.3%
    276       293        94.2%
    271       289        93.8%
    283       298        95.0%
    277       293        94.5%
    275       291        94.5%
    281       294        95.6%
    270       283        95.4%
    276       295        93.6%
    271       285        95.1%
    417       287       145.3%
    287       309        92.9%
    273       287        95.1%
    265       283        93.6%
    282       297        94.9%
    286       302        94.7%
    270       285        94.7%
    279       350        79.7%
    267       281        95.0%
    282       295        95.6%
    276       291        94.8%
    278       294        94.6%
    282       294        95.9%
    273       430        63.5%
    276       295        93.6%
    268       285        94.0%
    269       282        95.4%
    266       282        94.3%
    283       302        93.7%
    280       297        94.3%
    275       289        95.2%
    283       291        97.3%
    268       282        95.0%
    266       283        94.0%
    277       290        95.5%
    263       286        92.0%
    278       296        93.9%
    580       296       195.9%
    279       297        93.9%
    274       287        95.5%
    272       292        93.2%
    271       286        94.8%
    278       297        93.6%
    818       279       293.2%
    278       289        96.2%
    281       297        94.6%
    269       283        95.1%
    271       292        92.8%
    276       290        95.2%
    310       285       108.8%
    278       287        96.9%
    265       283        93.6%
    280       290        96.6%
    281       293        95.9%
    276       287        96.2%
    271       284        95.4%
    270       288        93.8%
    272       286        95.1%
    270       295        91.5%
    278       294        94.6%
    275       295        93.2%
    273       289        94.5%
    279       384        72.7%
    277       299        92.6%
    281       301        93.4%
    272       288        94.4%
    270       287        94.1%
    276       292        94.5%
    270       310        87.1%
    282       295        95.6%
    281       299        94.0%
    283       295        95.9%
    280       296        94.6%
    272       284        95.8%
    273       290        94.1%
    275       292        94.2%
    563       299       188.3%
    266       289        92.0%
    283       303        93.4%
    279       295        94.6%
    276       288        95.8%
    275       296        92.9%
    277       287        96.5%
    274       289        94.8%
    271       287        94.4%
    276       294        93.9%
    273       291        93.8%
    272       288        94.4%
    281       289        97.2%
    365       289       126.3%
    276       293        94.2%
    276       290        95.2%
    278       291        95.5%
    281       291        96.6%
    275       509        54.0%
    276       289        95.5%
    272       284        95.8%
    287       300        95.7%
    276       292        94.5%
    ---------------------------
    96598     122795     78.7%
    

    在这个例子中,即swap(&a[i], &a[j]) 对应的bubble耗时 是 swap(&a[j],&a[j+1]) 对应的bubble2 耗时的78.7%

    这是怎么回事?

  • 相关阅读:
    LeetCode中等题(三)
    java之使用poi对excel的.xls和.xlsx访问
    JAVA编程-----------40、字符串排序
    JAVA编程------------38、写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度
    JAVA编程---------37、n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下的是原来第几号的那位。
    JAVA编程--------------36、有n个整数,使其前面各数顺序向后移m个位置最后m个数变成前面m个数
    JAVA编程-------------24、将一组数的最大数放在第一位,最小的数放在最后一位
    JAVA编程------------33、打印杨辉三角
    JAVA编程--------------32、取一个整数的4-7位
    JAVA编程---------------31、将一个数组逆序输出
  • 原文地址:https://www.cnblogs.com/mathzzz/p/2690871.html
Copyright © 2020-2023  润新知