Ecqiao

天堂有路你不走,学海无涯苦作舟

【算法】一些线性排序算法

一、计数排序

使用这个算法有一个前提,待排序的数组a,其所有的元素分布在区间[0,k],该算法的时间复杂度为O(n+k),当k=O(n)时,运行时间为O(n),所以当k比较小的时候适合采用这个算法

下面给出这个算法实现的代码


#include <iostream>

using namespace std;


void counting_sort ( int a[], int k, int len ) {
    int c[100] = {0};
    int b[100] = {0};


    // 初始化
    for ( int i = 0; i < k; ++i ) {
        c[i] = 0;
    }

    // 统计计数
    for ( int i = 0; i < len; ++i ) {
        c[a[i]]++;
    }

    for ( int i = 1; i <= k; ++i ) {
        c[i] += c[i-1];
    }

    for ( int i = len - 1; i >= 0; --i ) {
        b[c[a[i]]] = a[i];
        c[a[i]]--;
    }

    for ( int i = 0; i < len; ++i ) {
        a[i] = b[i];
    }

}

int main()
{
    int a[] = {4,6,8,3,8,2,9,3,1,0,8,9,1,9,8,0,8,9,8,8,3,2};
    int len = sizeof(a) / sizeof(int);
    counting_sort(a,9,len);
    for ( int i = 0; i < len; ++i ) {
        cout << a[i] << " ";
    }


    return 0;
}


二、基数排序

三、桶排序


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tao20dage/article/details/52372630
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

【算法】一些线性排序算法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭