四种排序算法的时间比较

【注】clock函数对输入(用户输入)元素N排序的计时

 #include<iostream>

 #include<time.h>

 using namespace std;

 template<class T>

 inline void Swap(T& a, T& b);

 template<class T>

 void BubbleSort(T a[], int n);

 template<class T>

 void InsertionSort(T a[], int n);

 template<class T>

 void SelectionSort(T a[], int n);

 template<class T>

 void Rank(T a[], int n);

 int main()

 {

 int n,*a1,*a2,*a3,*a4;

 cout<<"please input a number(1000~60000)"<<endl;

 cin>>n;

 a1=new int[n];

 a2=new int[n];

 a3=new int[n];

 a4=new int[n];

 double start, finish;

 for (int i = ; i < n; i++)

 { a1[i] = n -i; // initialize

 a2[i]=a1[i];

 a3[i]=a2[i];

 a4[i]=a3[i];

 }

 start = clock( );

 InsertionSort(a1, n);

 finish = clock( );

 cout << n << ' ' << (double)(finish -start) / (CLOCKS_PER_SEC)<< endl;

 start = clock( );

 SelectionSort(a2, n);

 finish = clock( );

 cout << n << ' ' << (double)(finish -start) / (CLOCKS_PER_SEC)<< endl;

 start = clock( );

 Rank(a3, n);

 finish = clock( );

 cout << n << ' ' << (double)(finish -start) / (CLOCKS_PER_SEC)<< endl;

 start = clock( );

 BubbleSort(a4, n);

 finish = clock( );

 cout << n << ' ' << (double)(finish -start) / (CLOCKS_PER_SEC)<< endl;

 delete []a1;

 delete []a2;

 delete []a3;

 delete []a4;

 system("pause");

 }

 template<class T>

 inline void Swap(T& a, T& b)

 {// Swap a and b.

 T temp = a;

 a = b;

 b = temp;

 }

 /*********************Bubble Sort*************************/

 /*进行n- 1次遍历,每次邻位比较,是最大数冒到最后面 */

 template<class T>

 void BubbleSort(T a[], int n)

 {// Sort a[0:n -1] using bubble sort.

 for (int i = n; i > ; i--)

 for (int i = ; i < n -; i++)

 if (a[i] > a[i+])

 Swap(a[i], a[i + ]);

 }

 /**********************Insertion Sort***********************/

 /*每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕*/

 template<class T>

 void InsertionSort(T a[], int n)

 {// Sort a[0:n-1].

 for (int i = ; i < n; i++) {

 // insert a[i] into a[0:i-1]

 T t = a[i];

 int j;

 for (j = i-; j >=  && t < a[j]; j--)

 a[j+] = a[j];

 a[j+] = t;

 }

 }

 /********************Selection sort************************/

 /*将最大的数选择出来,并与每次的最后一个数进行交换 */

 template<class T>

 void SelectionSort(T a[], int n)

 {

 bool sorted = false;

 for (int size = n; !sorted && (size > ); size--)

 {

 int pos = ;

 sorted = true;

 for (int i = ; i < size; i++)

 if (a[pos] <= a[i]) pos = i;

 else sorted = false; // out of order

 Swap(a[pos], a[size -]);

 }

 }

 /*******************Rank sort*****************************/

 /*先将数组中的元素按大小给它标号,并存在另外一个相应的数组里面,

 然后新建个数组按照标号读取原来数组的值,之后再把排好后的值依次赋给原来数组

 */

 template<class T>

 void Rank(T a[], int n) {

 int *r = new int[n+];

 for(int i = ; i < n; i++)

 r[i] = ; //initialize

 for(int i = ; i < n; i++) {

 for(int j = ; j < i; j++) {

 if(a[j] <= a[i])

 r[i]++;

 else r[j]++;

 }

 } //end for

 T *u = new T[n+];

 for (int i = ; i < n; i++) {

 u[r[i]] = a[i];

 }

 for (int i = ; i < n; i++) {

 a[i] = u[i];

 }

 delete []u;

 } //end function

【C++】四种排序算法的时间比较的更多相关文章

  1. php四种排序算法实现代码

    分享php排序的四种算法与代码. 冒泡:function bubble_sort($arr){ $num = count($arr); for($i=0;$i<$num;$i++){ for($ ...

  2. php中的四种排序算法

    . 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将 ...

  3. PHP的几种排序算法的比较

    这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...

  4. golang实现四种排序(快速,冒泡,插入,选择)

    本文系转载 原文地址: http://www.limerence2017.com/2019/06/29/golang07/ 前面已经介绍golang基本的语法和容器了,这一篇文章用golang实现四种 ...

  5. php 冒泡 快速 选择 插入算法 四种基本算法

    php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...

  6. 几种排序算法的学习,利用Python和C实现

    之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...

  7. PHP四种基础算法详解

    许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...

  8. Java 的八种排序算法

    Java 的八种排序算法 这个世界,需要遗忘的太多. 背景:工作三年,算法一问三不知. 一.八种排序算法 直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序和基数排序. 二.算 ...

  9. Hive 中的四种排序详解,再也不会混淆用法了

    Hive 中的四种排序 排序操作是一个比较常见的操作,尤其是在数据分析的时候,我们往往需要对数据进行排序,hive 中和排序相关的有四个关键字,今天我们就看一下,它们都是什么作用. 数据准备 下面我们 ...

随机推荐

  1. JavaScript学习总结(7)——JavaScript基础知识汇总

  2. A - Number Sequence

    Given two sequences of numbers : a11, a22, ...... , aNN, and b11, b22, ...... , bMM(1 <= M <= ...

  3. MVC.Net:Razor指定模板

    在MVC.Net开发中,我们通常会在_ViewStart.cshtml中指定一个默认的模板,在文件开头输入如下代码: @{ Layout = "~/Views/Shared/[自己定义的模板 ...

  4. Libs文件夹下的Jar文件为什么不会自己主动放在Android Private Libraries文件夹下

    简而言之:这个问题就是由jar包反复冲突了! 这个问题一開始我出现了一种"自以为是"的答案,在Android Private Libraries文件夹下的是会打包到project可 ...

  5. Harry Potter and the Order of the Phoenix

    书名:Harry Potter and the Order of the Phoenix 作者:J.K. Rowling 篇幅: 870P 蓝思值:950L 用时: 22天 工具: 有道词典 [透析成 ...

  6. LINQ Query Expressions

    https://msdn.microsoft.com/en-us/library/bb397676(v=vs.100).aspx Language-Integrated Query (LINQ) is ...

  7. elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能

    压缩配置: index.codec: best_compression 合并索引: curl –XPOST localhost:9200/hec_test3/_forcemerge’ 配置mappin ...

  8. tarjan用法——割点

    今天洛谷疯狂给我推送tarjan的题(它好像发现了我最近学tarjan),我正好做一做试一试(顺便练一练快读和宏定义). 其实找割点的tarjan和算强连通分量的tarjan不一样,找割点的判定条件比 ...

  9. JS文件中的中文在网页上显示为乱码解决方法

    转自:http://www.pc6.com/infoview/Article_63835.html 如果JS文件中的中文在网页上显示为乱码,不妨采用本文章中的方法来试一试,或许能解决使你很头疼的问题. ...

  10. E20170915-hm

    client n. 顾客; 当事人; 诉讼委托人; [计算机] 客户端; seal  n. 密封; 印章; 海豹; 封条;  v. 密封; 盖章; 决定; 封上(信封); sheet  n. 纸; 被 ...