【C++】四种排序算法的时间比较
四种排序算法的时间比较
【注】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++】四种排序算法的时间比较的更多相关文章
- php四种排序算法实现代码
分享php排序的四种算法与代码. 冒泡:function bubble_sort($arr){ $num = count($arr); for($i=0;$i<$num;$i++){ for($ ...
- php中的四种排序算法
. 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将 ...
- PHP的几种排序算法的比较
这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...
- golang实现四种排序(快速,冒泡,插入,选择)
本文系转载 原文地址: http://www.limerence2017.com/2019/06/29/golang07/ 前面已经介绍golang基本的语法和容器了,这一篇文章用golang实现四种 ...
- php 冒泡 快速 选择 插入算法 四种基本算法
php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...
- 几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
- PHP四种基础算法详解
许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...
- Java 的八种排序算法
Java 的八种排序算法 这个世界,需要遗忘的太多. 背景:工作三年,算法一问三不知. 一.八种排序算法 直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序和基数排序. 二.算 ...
- Hive 中的四种排序详解,再也不会混淆用法了
Hive 中的四种排序 排序操作是一个比较常见的操作,尤其是在数据分析的时候,我们往往需要对数据进行排序,hive 中和排序相关的有四个关键字,今天我们就看一下,它们都是什么作用. 数据准备 下面我们 ...
随机推荐
- MAC OS下JDK版本切换指南
刚上手的用MAC开发的小伙伴们会发现,MAC自带JDK版本为1.6,通常会安装在 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/目录下,但是更多 ...
- iOS学习笔记17-FMDB你好!
上一节我已经介绍了SQLite的简单使用,不了解的可以提前去看一下iOS学习笔记16-数据库SQLite,这节我们来讲下FMDB. 一.FMDB介绍 FMDB是一种第三方的开源库,FMDB就是对SQL ...
- NOI2017爆零记[AFO]
WC2017 12分……全省第一…… APIO2017 4分……全省第二…… 千言万语汇成两个表格 NOI2017 114分(笔试100+一试4+二试5+A类5)……全省第三…… 全场最菜…… day ...
- CodeForces - 205B - Little Elephant and Sorting
先上题目: Little Elephant and Sorting time limit per test 1 second memory limit per test 256 megabytes i ...
- npm install socket.io 提示缺少"VCBuild.exe"
http://www.cnblogs.com/yangzhx/p/4648501.html https://www.v2ex.com/t/120493
- DTrace Probes In MySQL 自定义探针
Inserting user-defined DTrace probes into MySQL source code is very useful to help user identify the ...
- Java 设计模式—装饰者模式
在Java编程语言中,嵌套了非常多设计模式的思想,比如IO流中的缓冲流就使用到以下要介绍的装饰者设计模式. 演示样例代码: * 抽象构件角色:定义一个抽象接口,来规范准备附加功能的类 * @autho ...
- [字典树] poj 2418 Hardwood Species
题目链接: id=2418">http://poj.org/problem?id=2418 Hardwood Species Time Limit: 10000MS Memory ...
- 保护眼睛-eclipse黑色背景设置
eclipse中java编辑器颜色改动,适合程序员人群: 长时间编码,眼睛是有非常大负担的,特别是使用eclipse,它自带的java编辑器背景色是刺眼的白色.代码颜色基本是黑色,这样一个编辑器里白色 ...
- 《从零開始学Swift》学习笔记(Day 52)——Cocoa错误处理模式
原创文章,欢迎转载. 转载请注明:关东升的博客 Swift错误处理模式,在Swift1.x和Swift 2.0是不同的两种模式. Swift 1.x代码错误处理模式採用Cocoa框架错误处理模式,到如 ...