四种排序算法的时间比较

#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 = 0; 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 > 1; i--)

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

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

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

}

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

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

template<class T>

void InsertionSort(T a[], int n)

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

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

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

T t = a[i];

int j;

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

a[j+1] = a[j];

a[j+1] = t;

}

}

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

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

template<class T>

void SelectionSort(T a[], int n)

{

bool sorted = false;

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

{

int pos = 0;

sorted = true;

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

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

else sorted = false; // out of order

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

}

}

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

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

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

*/

template<class T>

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

int *r = new int[n+1];

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

r[i] = 0; //initialize

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

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

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

r[i]++;

else r[j]++;

}

} //end for

T *u = new T[n+1];

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

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

}

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

a[i] = u[i];

}

delete []u;

} //end function

时间: 2024-10-24 06:14:44

四种排序算法的时间比较的相关文章

四种排序算法PHP实现类

四种排序算法的PHP实现:1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. 2) 选择排序(Selection Sort)的基本思想是: 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕. 3) 冒泡排序的基本思想是: 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止. 4) 快速排序实质上和

常用的四种排序算法

#include <stdio.h> void BubbleSort(int a[], int size, int order); void SelectSort(int a[], int size, int order); void InsertSort(int a[], int size, int order); void QuickSort(int a[], int size, int order); int main() { int a[5]={5,3,4,2,1}; int i; /

四种排序算法实现

目录 冒泡排序 冒泡算法 源代码(冒泡排序) 选择排序 选择算法 源代码(选择排序) 插入排序 插入算法 源代码(插入排序) 快速排序 快速排序算法 源代码(快速排序) 总结 References 冒泡排序 冒泡算法 比较相邻的元素.如果左边比右边大,就互换位置 对每一对相邻元素作同样的工作,从第一对到最后一对,完成后,最后元素为最大值 源代码(冒泡排序) //冒泡排序 public static void bubbleSort(int[] slist) { //从头开始遍历 for(int i

php中的四种排序算法

1 1. 冒泡排序 2 3 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 4 5 代码实现: 6 7 8 $arr=array(1,43,54,62,21,66,32,78,36,76,39); 9 function bubbleSort($arr) 10 { 11 $len=count($arr); 12 //该层循环控制 需要冒泡的轮数 13

四种排序算法与二分查找

1. 冒泡排序 func BubbleSort(slice []int) []int { i, j, okay, count := 0, 0, true, len(slice) for i = 0; i < count-1; i++ { //最多需要进行count-1轮比较 okay = true for j = 0; j < count-i-1; j++ { //每一轮比较的逻辑 if slice[j] > slice[j+1] { slice[j], slice[j+1] = sli

PHP四种基础算法详解

许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的. 需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到的顺序进行排序. $arr=array(11,3,56,62,21,66,32,78,36,76,39,88,34); 1.冒泡排序 介绍: 冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排

八种排序算法(内部排序)

八种排序算法很长时间没有使用了,今天做一个总结,方便以后自己用的时候参考. 这八种排序算法都是内部算法,这八种排序算法分别是: 1. 插入排序 1)直接插入排序 2)希尔排序 2.选择排序 1)简单选择排序 2)堆排序 3.交换排序 1)冒泡排序 2)快速排序 4.归并排序 5.基数排序 一.直接插入排序 将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表.在实际操作中,先将序列的第一个记录看成是一个有序的子序列,然后从第二个.第三个.……记录逐个进行插入,直至整个序列有

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综

算法—比较两种排序算法:选择排序和插入排序

现在我们已经实现了两种排序算法,我们很自然地想知道选择排序和插入排序哪种更快.这里我们第一次用实践说明我们解决这个问题的办法. 性质:对于随机排序的无重复主键的数组,插入排序和选择排序的运行时间是平方级别的,两者之比应该是一个较小的常数. 例证:这个结论在过去的半个世纪中已经在许多不同类型的计算机上经过了验证.在1980年本书第一版完成之时插入排序就比选择排序快一倍,现在仍然是这样,尽管那时这些算法将10万条数据排序需要几个小时而现在只需要几秒钟.在你的计算机上插入排序也比选择排序快一些吗?可以