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

    基本思想

    将所有待比较的数值统一为同样的数位长度,数位较短的前面补0,然后,从最低位开始,一次进行一次排序,这样从最低位开始一直到最高位排序完成以后,数列就变成一个有序序列

    Java代码实现

    public class RadixSort {
        public static void main(String[] args) {
            int[] w=new int[8000000];
            for (int i = 0; i < w.length; i++) {
                w[i] = (int) (Math.random() * 80000000);
            }
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String de = dateFormat.format(date);
            System.out.println(de);
            radixSort(w);
            Date date1 = new Date();
            SimpleDateFormat dateFormat1 = new SimpleDateFormat("mm:ss");
            String de1 = dateFormat1.format(date1);
            System.out.println(de1);
        }
    
        public static void radixSort(int[] arr) {
            int[][] buckets = new int[10][arr.length];
            int[] bucketElementCounts = new int[10];//定义一个数组来记录每个桶中的元素个数
            int mod = 0;
            int max = arr[0];
            int maxLength=0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            while (max != 0) {
                max = max / 10;
                maxLength++;
            }
            System.out.println(maxLength);
            for (int m=0,n=1;m<maxLength;m++,n*=10){
            for (int i = 0; i < arr.length; i++) {
                mod=arr[i]/n%10;
                buckets[mod][bucketElementCounts[mod]] = arr[i];
                bucketElementCounts[mod]++;
            }
            int index = 0;
            //按照桶的顺序,依次把数据存入数组
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < bucketElementCounts[i]; j++) {
                    arr[index] = buckets[i][j];
                    index++;
                }
                //赋值完成后,将bucketElementCounts[i] 置为0
                bucketElementCounts[i] = 0;
            }
            }
        }
        public static void radixSort2(int[] arr) {
            //第一轮排序
            //第一轮排序
            //用二维数组来初始化10个桶,每个桶代表一个一维数组,大小为arr.length
            int[][] buckets = new int[10][arr.length];
            int[] bucketElementCounts = new int[10];//定义一个数组来记录每个桶中的元素个数
            int mod = 0;
            for (int i = 0; i < arr.length; i++) {
                mod=arr[i]%10;
                buckets[mod][bucketElementCounts[mod]] = arr[i];
                bucketElementCounts[mod]++;
            }
            int index = 0;
            //按照桶的顺序,依次把数据存入数组
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < bucketElementCounts[i]; j++) {
                    arr[index] = buckets[i][j];
                    index++;
                }
                //赋值完成后,将bucketElementCounts[i] 置为0
                bucketElementCounts[i] = 0;
            }
    
            //******************************************//
            //第二轮
            for (int i = 0; i < arr.length; i++) {
                mod=arr[i]/10%10;
                buckets[mod][bucketElementCounts[mod]] = arr[i];
                bucketElementCounts[mod]++;
            }
            index = 0;
            //按照桶的顺序,依次把数据存入数组
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < bucketElementCounts[i]; j++) {
                    arr[index] = buckets[i][j];
                    index++;
                }
            }
        }
    }
    

    运行结果

  • 相关阅读:
    使用jQuery的validation后,无法引发asp.net按钮的事件处理程序
    近期一些超值文章及工具收集
    修复MOSS2007备份还原后搜索服务出现的问题(续)
    给ASP.net程序配置代理服务器
    vue 2.0 路由切换以及组件缓存源代码重点难点分析
    [模板]大整数相加、相乘
    PKU 3468 A Simple Problem with Integers
    USACO sec1.4 Packing Rectangles
    HDOJ 2795 Billboard
    [贪心] COJ 1236 删数游戏
  • 原文地址:https://www.cnblogs.com/qingfeng5438/p/13627909.html
Copyright © 2011-2022 走看看