首页 > 编程语言 > 详细

同一个算法,C++竟然比C快8倍!

时间:2016-01-06 00:22:28      阅读:170      评论:0      收藏:0      [点我收藏+]
??

同一个算法,C++竟然比C快8倍!


下面用C++和C分别实现直接插入排序,结果C++竟然比C快8倍!


下面是几次的输出结果:
(C)Total seconds time taken by CPU: 119.920000
(C++)seconds time: 14.92

(C)Total seconds time taken by CPU: 118.190000
(C++)seconds time: 14.53

(C)Total seconds time taken by CPU: 118.660000
(C++)seconds time: 14.52


C实现代码:


(linux下编译 g++ test.cpp -o test执行./test)

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

#define GETCOUNT(x)  (sizeof(x) / sizeof((x)[0]))

void InsertionSort(int *a, int n) {
        int tmp,j;
	for(int i = 1; i < n; ++i) {
		tmp = a[i];
		j = i;
		while(j > 0 && tmp < a[j - 1]) {
			a[j] = a[j - 1];
                        j--;
		}
		a[j] = tmp;
	}
}

void Print(int *a, int n)
{
    for (int i = 0; i < n; i++)
        printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
}
 
int main () {
    clock_t start_t, end_t;
    start_t = clock();
    printf("Starting of the program, start_t = %ld\n", start_t);

    int a[200000];
    for(int i=0;i<200000;i++)
    {
       a[i]=100-i;
    }

    int n = GETCOUNT(a);
    int i;

    //Print(a, n);
    InsertionSort(a, n);
    //Print(a, n);

   end_t = clock();
   printf("End of the function, end_t = %ld\n", end_t);
   double total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
   printf("Total seconds time taken by CPU: %f\n", total_t  );

    return 0;
}

C++实现代码:


(linux下编译 g++ -std=c++11 test2.cpp -o test2执行./test2)

#include <algorithm>
#include <iostream>
#include <iterator>
#include <ctime>

//See the code in :http://en.cppreference.com/w/cpp/algorithm/rotate
template <typename RandomAccessIterator>
void InsertionSort(RandomAccessIterator begin, RandomAccessIterator end) {
  for (auto i = begin; i != end; ++i) {
    std::rotate(std::upper_bound(begin, i, *i, std::less<typename std::iterator_traits<RandomAccessIterator>::value_type>()), i, i + 1);
  }
}

int main() {
  int start_s=clock();
  int a[200000];
  for(int i=0;i<200000;i++)
  {
     a[i]=100-i;
  }
  //copy(std::begin(a), std::end(a), std::ostream_iterator<int>(std::cout, " "));
  std::cout << "\n";
  InsertionSort(std::begin(a), std::end(a));
  //copy(std::begin(a), std::end(a), std::ostream_iterator<int>(std::cout, " "));
  std::cout << "\n";
  int stop_s=clock();
  std::cout << "seconds time: " << (stop_s-start_s)/double(CLOCKS_PER_SEC) << "\n";

  return 0;
}


同一个算法,C++竟然比C快8倍!

原文:http://blog.csdn.net/yangzhenping/article/details/50464119

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!