排序算法1:最快最简单的排序——桶排序(C++版本)


讲解链接:
链接1:【坐在马桶上看算法】算法1:最快最简单的排序——桶排序

在此感谢啊哈磊

链接2: 最快、最简单的排序算法——桶排序
原文中附有代码。


下面我要开始摘抄总结了。。。。文字来源于博客2。。。

1.什么是桶排序

桶排序,也叫做箱排序,是一种排序算法,也是排序算法中最快、最简单的排序算法。其中的思想是我们首先要知道所有待排序的范围,然后需要有在这个范围的同样数量的桶,接着把元素放到对应的桶中,最后按顺序输出。

这时间上是简易版的桶排序,试想一下,如果要排序的范围是0-100万,使用桶排序方法进行排序,那么我们要准备100万个桶,这显然对于计算机的开销肯定很大,所以,桶排序在有这时间最快的优势,同时也有这及其耗费内存的缺点。

2.桶排序的实现

我们怎么在代码中实现桶排序呢?其实很简单,使用数组就好了,比如有11个桶,我们只需要声明一个长度为11的数组,然后把每个元素往桶中放时,就把数组指定位置的值加1,最终输出数组的下标,数组每个位置的值为几就输出几次下标,这样就可以实现桶排序了。

3.复杂度分析:

桶排序实际上只需要遍历一遍所有的待排序元素,然后依次放入指定的位置,如果加上输出排序的时间,那么需要遍历所有的桶,时间复杂度为 O ( n + m ) ,其中n为待排序元素的个数,m为桶的个数,这时相当快的排序算法,但是,对于空间的小号来说太大了。当n越大,空间浪费就越大,所以,如果数据跨度过大,桶排序并不适用跨度范围大的排序。


4.以下是自己的代码(C++版本):

#include <stdio.h>
#include <iostream>

using namespace std;
void TongSort(int *score,int num)
{
    int a[11];
    for(int i=0;i<=10;i++)
        a[i]=0;

    for(int i=0;i<num;i++)
    {
        int temp=score[i];
        ++a[temp];
    }

    for(int i=0;i<11;i++)
    {
        int num_print=a[i];
        for(int j=1;j<=num_print;j++)
           cout<<i<<" ";
    }

}

int main()
{
    int Score[]={5,3,5,2,8};
    int num=sizeof(Score)/sizeof(int);
    TongSort(Score,num);
    getchar();getchar();  //这里的getchar();用来暂停程序,以便查看程序输出的内容
    //也可以用system("pause");等来代替
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80297886