zoukankan      html  css  js  c++  java
  • 基数排序

    基数排序是一种使用关键字的排序算法,是一种不需要比较的排序算法。

     1 import java.util.Arrays;
     2 import java.util.LinkedList;
     3 import java.util.Queue;
     4 
     5 public class MyRadixSort {
     6     public static void main(String[] args) {
     7         int num[] = {10, 8, 33, 54, 1, 6, 12, 43, 32, 27};
     8         radixSort(num);
     9         System.out.println(Arrays.toString(num));
    10     }
    11 
    12     private static void radixSort(int[] num) {
    13         int m = getMax(num);   //用来寻找最大元素长度
    14         int n = 1;   //用来取位,1用来表示取个位数字,10用来表示十位数字
    15         //表示0-9的每一个桶
    16         Queue buckets[] = new Queue[10];
    17         for (int i = 0; i < buckets.length ; i++) {
    18             buckets[i] = new LinkedList();
    19         }
    20         /*
    21         不可以用Arrays.fill(buckets, new LinkedList<Integer>());
    22         因为该语句会将所有数组元素添加同一个队列对象,需要用不同的对象进行初始化
    23          */
    24         //当基数排序次数小于len时,继续进行基数排序
    25         while (n < m) {
    26             //使用基数排序时需要从低位开始,因为在比较过程中有些数字可能没有高位
    27             for (int x : num) {
    28                 int val = (x / n) % 10;
    29                 buckets[val].offer(x);
    30             }
    31 
    32             int k = 0;
    33             for (Queue queue : buckets) {
    34                 while (!queue.isEmpty()) {
    35                     num[k] = (int) queue.poll();
    36                     k++;
    37                 }
    38             }
    39             n *= 10;
    40         }
    41     }
    42 
    43     private static int getMax(int[] num) {
    44         int max = num[0];
    45         for (int i = 0; i < num.length; i++) {
    46             if (num[i] > max) {
    47                 max = num[i];
    48             }
    49         }
    50         return max;
    51     }
    52 }
  • 相关阅读:
    HDOJ 4747 Mex
    HDU 1203 I NEED A OFFER!
    HDU 2616 Kill the monster
    HDU 3496 Watch The Movie
    Codeforces 347A A. Difference Row
    Codeforces 347B B. Fixed Points
    Codeforces 372B B. Hungry Sequence
    HDU 1476 Sudoku Killer
    HDU 1987 How many ways
    HDU 2564 词组缩写
  • 原文地址:https://www.cnblogs.com/zz-1120-wtenlb/p/13376815.html
Copyright © 2011-2022 走看看