zoukankan      html  css  js  c++  java
  • 05-基数排序算法

    基数排序

    基数排序:LSD法,最低位优先 ,先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列;即元素从这个位排好序,然后再从十位排好序,直到最高位排序完成。时间复杂度为:O(d(n+radix)) 。

    LSD基数排序:

    • C++
    void RadixSort(vector<int> &v, int d, int size){
        int i, j, digit = 1;
        queue<int> digitQueue[10]; //对应位的队列
        for(i = 0; i < d; i++){
            for(j = 0; j < size; j++){
                digitQueue[(v[j] / digit)%10].push(v[j]);
            }
            j = 0;
            for(int digitValue = 0; digitValue < 10; digitValue++){
                while(!digitQueue[digitValue].empty()){
                    v[j] = digitQueue[digitValue].front();
                    digitQueue[digitValue].pop();
                    j++;
                   }
            }
            cout <<"经过第 " << i << " 次排序的结果如下:" << endl;
            for(j = 0; j < size; j++){
                cout << v[j] << " ";
            }
            cout << endl;
            digit *= 10;
        }
    }

     

    • JAVA
    /**
     * @param array 数组
     * @param d 最高的位数 如 9999 则为4位
     * @param len 数组长度
     */

    public static void radixSort(int[] array, int d, int len){

        int i, j, digit = 1;
        Queue<Integer>[] digitQueue = new LinkedList[10]; //对应位的队列:个 十 百 千 万
        for (i = 0; i < 10; i++){ //init instance
            digitQueue[i] = new LinkedList<>();
        }

        for (i = 0; i < d; i++){ //从低位到高位遍历进行排序
            for (j = 0; j < len; j++){
                digitQueue[(array[j] / digit) % 10].offer(array[j]);
            }

            j = 0;
            for (int digitValue = 0; digitValue < 10; digitValue++){
                while (!digitQueue[digitValue].isEmpty()){
                    array[j] = digitQueue[digitValue].poll();
                    j++;
                }
            }
            digit *= 10;

            System.out.print(String.format("经过第%d次排序的结果如下:", i));
            for (j = 0; j < len; j++){
                System.out.print(array[j] + " ");
            }
            System.out.println();
        }
    }

    测试样例

    • 100, 594, 300, 99, 7
    经过第0次排序的结果如下:100 300 594 7 99 
    经过第1次排序的结果如下:100 300 7 594 99 
    经过第2次排序的结果如下:7 99 100 300 594 

    ----- end -----

     

  • 相关阅读:
    Android 监听电量的状态
    2017.1-TOP5 Android开源库
    Android实践 -- Android蓝牙设置连接
    Android ListView滚动到指定的位置
    软件原型设计工具
    plupload+struts2实现文件上传下载
    ORACLE 更改username
    单词反转实现
    FatMouse&#39; Trade(杭电1009)
    JS-JavaScript学习笔记(一)
  • 原文地址:https://www.cnblogs.com/denluoyia/p/9679403.html
Copyright © 2011-2022 走看看