关闭

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

标签: 排序算法算法导论算法c语言
195人阅读 评论(0) 收藏 举报
分类:

一、计数排序

使用这个算法有一个前提,待排序的数组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;
}


二、基数排序

三、桶排序


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13935次
    • 积分:511
    • 等级:
    • 排名:千里之外
    • 原创:36篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    最新评论