zoukankan      html  css  js  c++  java
  • java数据结构-排序算法-基数算法

    package com.kuang;

    import java.util.Arrays;

    /**
    * @auther 付强
    * @date 2020/2/15 - 10:46
    */
    public class RadixSort {
    public static void main(String[] args) {
    int[] arr=new int[]{23,6,189,45,9,289,56,1,789,32,65,652,5};
    radixSort(arr);
    System.out.println(Arrays.toString(arr));
    }
    public static void radixSort(int[] arr){
    //存数组中最大的数字
    int max=Integer.MIN_VALUE;
    for (int i = 0; i < arr.length; i++) {
    if(arr[i]>max){
    max=arr[i];
    }
    }
    //知道最大数字是几位数
    int maxlength=(max+"").length();
    //用于存储临时数据的数组
    int[][] temp=new int[10][arr.length];
    System.out.println(maxlength);
    //根据最大长度的数决定比较的次数
    int[] counts=new int[10];
    for (int i = 0,n=1; i < maxlength; i++,n*=10) {
    //把每一个数字分别计算余数
    for (int j=0;j<arr.length;j++){
    //拿出余数
    int i1 = arr[j] / n % 10;
    //把当前遍历的数据放到指定的数组中
    temp[i1][counts[i1]]=arr[j];
    //记录数量
    counts[i1]++;
    }
    if(i==0){
    for(int []nums:temp){
    System.out.println(Arrays.toString(nums));
    }
    System.out.println(Arrays.toString(counts));
    }
    //记录取得元素需要放的位置
    int index=0;
    //把数字取出来
    for (int i1 = 0; i1 < counts.length; i1++) {
    //记录数量的数组中当前余数记录的数量不为0
    if(counts[i1]!=0){
    //循环取出元素
    for (int l=0;l<counts[i1];l++){
    //取出元素
    arr[index]=temp[i1][l];
    index++;
    }
    //把数量值为0
    counts[i1]=0;
    }
    }
    }
    }
    }
  • 相关阅读:
    vitual box 虚拟机调整磁盘大小 resize partiton of vitual os
    单向链表逆转
    搭建公司的React开发环境
    2018 ICPC 沈阳网络预赛 Fantastic Graph (优先队列)
    背包问题初探
    HDU 2588 GCD (欧拉函数)
    ZOJ
    ZOJ
    ZOJ
    HDU
  • 原文地址:https://www.cnblogs.com/fuqiang-java/p/12311124.html
Copyright © 2011-2022 走看看