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++;
                }
            }
        }
    }
    

    运行结果

  • 相关阅读:
    目前服务器所需要的技能
    c++11 初始化列表 bind function 示例
    c++11 时间相关操作练习
    C++ Crypto++ RSA加密资料收集
    多线程查找大量数据加锁的速度降低
    c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)
    c++沉思录 学习笔记 第五章 代理类
    boost asio 一个聊天的基本框架
    c++11 并发 条件变量 超时等待的代码练习
    centos 6.5 hadoop 2.3 初配置
  • 原文地址:https://www.cnblogs.com/qingfeng5438/p/13627909.html
Copyright © 2011-2022 走看看