线性时间排序-counting_sort

int count_sort(int *A, int n, int k){
    int B[n];
    int C[k+1];

    for(int i = 0; i < k+1; i++)   //initialize C[i]: A的每个值有0个
        C[i] = 0;

    for(int i = 0; i < n; i++){     //将A的每个值的出现频率存储在C[i]中,i为A的值
        int j = A[i];
        C[j] = C[j]+1;
    }

    for(int i = 1; i < k+1; i++)   //C[i]中为A中<=i的值的个数
        C[i] = C[i] + C[i-1];

    for(int i = 0; i < n; i++){
        B[C[A[i]]-1] = A[i];     //B[<=i的值的个数] = i
        C[A[i]] = C[A[i]]-1;     // C[i]中<=i的值得个数减1
    }

    for(int i = 0; i < n; i++)
        cout<<"B["<<i<<"] = "<<B[i]<<endl;
    return 0;
}

int test(void){
    int A[] = {4,1,3,2,16,9,10,14,8,7};
    int n = sizeof(A)/ sizeof(int);
    count_sort(A, n, 16);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值