Java实现-高效排序算法之基数排序

1、基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。

2、算法的伪代码和排序方法如下所示(其中方法是实现对整数的排序方式)。

// 基数排序的伪代码
// RadixSort()
//    for d = 1 to 最长数字的最左边数字所在的位置
//        根据第d位数字将所有的数字分别分配到堆0至堆9中;
//        将所有证书放进一个数组中;
public static void radixsort(int[] data){
    int d, j, k, factor;
    int radix = 10;
    int digits = 10;
    Queue[] queues = new Queue[radix];

    //创建子队列,存放堆
    for(d = 0; d < radix; d++)
        queues[d] = new Queue();
    for(d = 1, factor = 1; d <= digits; factor *=radix, j++){
        for(j=0; j < data.length; j++)

        //此处对下标处理的比较好。即将data[j]插入到对应的子队列中

        queues[(data[j]/factor)%radix].enqueue(new Integer(data[j]));

    }

    for(j = k = 0; j < radix; j++){

        while(!queues[j].isEmpty()){

            //收集所有子堆(队列)中的元素放入到data[K++]中
            data[k++] = ((Integer)queues[j].dequeue()).intValue();
        }
    }
}

3、基数排序的时间是线性的O(n),空间复杂度是O(n+radix),属于稳定的排序方法。

另外,对于位的连接,用逻辑与运算符&来取代对整数中的除法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值