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

    运行结果

  • 相关阅读:
    多线程执行有返回值有参数的方法
    当连续进行多个请求,并且请求的url地址相同时。放弃前面的所有请求,只执行最后一次请求。
    防止重复发送Ajax请求的解决方案
    多行文本溢出显示省略号
    h5 文件跨域上传
    完美解决 IOS系统safari5.0 浏览器页面布局iframe滚动条失效问题,iossafari5.0
    CSS3 修改和去除移动端点击事件出现的背景框 (tap-highlight-color)
    去除img之间的空白
    手机上点击a标签是出现阴影解决办法
    idea通过maven构建springMVC+mybatis项目
  • 原文地址:https://www.cnblogs.com/qingfeng5438/p/13627909.html
Copyright © 2011-2022 走看看