比较C++和C实现直接插入排序和二分插入排序效率

20 篇文章 0 订阅


比较C++和C实现直接插入排序和二分插入排序效率!


注:之前没有发现这其实是两个不同算法,现在更正下。

下面用C++实现二分插入排序和C实现直接插入排序,明天会继续测试下C++实现直接插入排序和C实现二分插入排序


下面是几次的输出结果:
(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;
}


  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值