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

简介: 比较C++和C实现直接插入排序和二分插入排序效率!注:之前没有发现这其实是两个不同算法,现在更正下。下面用C++实现二分插入排序和C实现直接插入排序,明天会继续测试下C++实现直接插入排序和C实现二分插入排序下面是几次的输出结果:(C)Total seconds time taken by CPU: 119.


比较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;
}


目录
相关文章
|
6月前
|
搜索推荐 C++
C++插入排序的实现
C++插入排序的实现
|
6月前
|
算法 搜索推荐 C++
C++017-C++冒泡排序与插入排序
C++017-C++冒泡排序与插入排序
C++017-C++冒泡排序与插入排序
|
定位技术 C++
C++实现俄罗斯方块(附代码)
C++实现俄罗斯方块(附代码)
C++实现俄罗斯方块(附代码)
|
机器学习/深度学习 C++
C++实现实现逆时针旋转矩阵
C++实现实现逆时针旋转矩阵
C++实现实现逆时针旋转矩阵
|
存储 人工智能 搜索推荐
【八大数据排序法】插入排序法的图形理解和案例实现 | C++
排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增或递减的方式重新进行排序。在如今的互联网信息时代,随着大数据和人工智能的发展,大型企业的数据库中有亿级的用户数据量。因此对其进行处理,排序算法也就成为了其中必不可缺的步骤之一。
107 0
【八大数据排序法】插入排序法的图形理解和案例实现 | C++
|
存储 C++
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现
|
存储 Linux C语言
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
|
设计模式 安全 定位技术
C++从面试常考实现特殊类到单例模式的实现
C++从面试常考实现特殊类到单例模式的实现
C++从面试常考实现特殊类到单例模式的实现
|
存储 Java 应用服务中间件
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析
线程池设计, 从简单的我们平常设计线程池图解,到生活中的类似线程池的处理现实场景, 到简单的C++模拟nginx写的单链表组织工作队列的简单线程池实现 + nginx 部分源码刨析