zoukankan      html  css  js  c++  java
  • 基数排序-非比较排序,多关键字排序

    package com.example.sort.radix;
    
    import java.util.Arrays;
    
    public class RadixSort {
        public static void main(String[] args) {
            int[] arr = {421, 240, 115, 532, 305, 430, 124};
            // 求最大数位数
            int temp = arr[0];
            for (int i = 1; i < arr.length; i++) {
                if (temp < arr[i]) {
                    temp = arr[i];
                }
            }
            int bit = String.valueOf(temp).length();
            int[] result = sort(arr, bit);
            System.out.println(Arrays.toString(result));
        }
    
        /**
         * 基数排序
         *
         * @param arr
         */
        private static int[] sort(int[] arr, int bit) {
            //创建临时存储数组
            int[] result = new int[arr.length];
            // 建立0-9容器
            int[] count = new int[10];
            for (int i = 0; i < bit; i++) {
                // 10的i次方
                int division = (int) Math.pow(10, i);
                System.out.println(division);
                for (int j = 0; j < arr.length; j++) {
                    int num = arr[j] / division % 10;
                    System.out.println(num + "");
                    count[num]++;
                }
                // 计数排序的优化
                for (int m = 1; m < count.length; m++) {
                    count[m] = count[m] + count[m - 1];
                }
                for (int n = arr.length - 1; n >= 0; n--) {
                    int num = arr[n] / division % 10;
                    result[--count[num]] = arr[n];
                }
                // 一轮结束,替换原数组arr的位置
                System.arraycopy(result, 0, arr, 0, arr.length);
                // 清空count数组
                Arrays.fill(count, 0);
            }
            return result;
        }
    
        private static void swap(int[] arr, int i, int j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    
        private static void print(int[] arr) {
    
            for (int i : arr) {
                System.out.print(i + " ");
            }
        }
    }
    

      

  • 相关阅读:
    QT学习:08 QString
    QT学习:07 字符编码的问题
    QT学习:06 常用的全局变量与宏定义
    QT学习:05 元对象系统
    QT学习:04 代码化的界面绘制
    QT学习:03 信号与槽
    QT学习:02 界面布局管理
    HTTP权威指南之URL与资源
    系统安装注意事项
    HTTP权威指南之web基础
  • 原文地址:https://www.cnblogs.com/huan30/p/12850550.html
Copyright © 2011-2022 走看看