【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 中和排序相关的有四个关键字,今天我们就看一下,它们都是什么作用. 数据准备 下面我们 ...
随机推荐
- 3D全景之ThreeJs
3D全景之ThreeJs 一.前言 随着H5越来越多的被应用到各个领域,3D也越来越频繁的出现在各个H5案例中,今天我们就来讨论一下3D全景的实现. 据百度百科上介绍:720全景是视角超过人的正常视角 ...
- H5 坑
document.addEventListener("touchmove",function(e){e.preventDefault();},false); 防止滑动时整屏页面移动 ...
- jQuery学习之二 jQuery选择器
一.jQuery选择器是什么1.CSS选择器2.jQuery选择器 二.jQuery选择器的优势1.简洁的写法2.支持从CSS1到CSS3选择器3.完善的处理机制 传统js选择器假如要操作的元素不存 ...
- Hibernate数据缓存攻略
目录 第一章 缓存策略概述 第二章 hibernate不使用缓存的问题 第三章 一级缓存介绍 第四章 二级缓存 第五章 一二级缓存对比及总结 源代码: https://github.com/weili ...
- springMVC入门笔记
目录 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 基本数据类型的获取: 如果表单域 ...
- MFS搭建
MooseFS是一个分布式存储的框架,其具有如下特性: 1.Free(GPL) 2.通用文件系统,不需要修改上层应用就可以使用 3.可以在线扩容,体系架构可伸缩性极强. ...
- CF #330 C
改了题目之后,就是没有奇数的测试了... 其实可以很轻易地发现,要距离近的一方只会删除两端的,而要求远的一方会删除中间的. 那么,很明显的,剩下的两点会相差x/2个节点,于是,只要计算i和i+x/2的 ...
- 虚拟化(四):vsphere高可用功能前提-共享存储搭建
虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(三):vsphere套件的安装注意及使用 虚拟化(四):vsphere高可用功能 ...
- Win8.1下COCOS2D-X 3.4环境搭建
Cocos2dx_3.4开发环境搭建,并编译成APK 第一步:须要下载的:(windows64位系统下环境搭建) Ant apache-ant-1.9.4-bin.zip NDK and ...
- Android实战简易教程-第二十四枪(基于Baas的用户表查询功能实现!)
接着上一篇,我们注冊了几个用户,用户表例如以下: 以下我们用ListView将表中数据显示出来吧. 首先看一下main.xml: <RelativeLayout xmlns:android=&q ...