欢迎光临散文网 会员登陆 & 注册

【C】排序

2022-07-23 12:58 作者:R_2147483647  | 我要投稿

用空间换时间的策略/基数排序,比公网上其他介绍简洁一点。

13-14行可用std::swap()替代

我不喜欢写注释,因为我不会侮辱读者的智商。

正文要超过200字才能投稿,附上代码:

#include<iostream>

void sort(int* array, int k, int max, int length){
    const int bs=10;
    int arrayret[length]={0};
    int base[bs]{0};
    for(int i=0; i<length; i++){
        base[(array[i]/k)%bs]++;
    }
    for(int i=1; i<bs; i++){
        base[i]+=base[i-1];
    }
    for(int i=length-1; i>=0; i--){
        arrayret[--base[(array[i]/k)%10]]=array[i];
    }
    for(int i=0; i<length; i++){
        array[i]=arrayret[i];
    }
    k*=10;
    if(k<max){
        sort(array,k,max,length);
    }
}

void sort(int* array,int length){
    sort(array,1,10000000,length);
}

int main(){
    int a[8]={324,55,335,667,23,67,40,38};
    sort(a,8);
    for(unsigned i=0; i<8; i++){
        std::cout<<a[i]<<" ";
    }
}

【C】排序的评论 (共 条)

分享到微博请遵守国家法律