Java实现基数排序

简介: Java实现基数排序

基数排序和计数排序一样无需进行比较和交换,和桶排序一样利用分布和收集两种基本操作进行排序。基数排序是把每一个元素拆成多个关键字,一个关键字可以在每一个元素上同等的位置进行计数排序,一个元素拆成多个关键字可以看作是要进行几轮分桶,以一个元素最长的长度为准。

基数排序可以看成多(单)关键字的排序,可以想象成桶排序那样分桶排序,也可以像计数排序那样归约化分治。

基数排序的思想是将待排序序列中的每组关键字进行桶排序。例如整数序列[103, 9, 1,7,11,15, 25, 201, 209, 107, 5]上每个位、十位和百位上的数字看成是一个关键字。

源码

package com;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
  public static void main(String[] args) {
    Scanner s=new Scanner (System.in);
    int n=s.nextInt();
    int [] a=new int [n];
    for(int i=0;i<n;i++)
      a[i]=(int)(Math.random()*100);
    radixsort(a);
    System.out.println(Arrays.toString(a));
  }
  public static void radixsort (int[] a) {
    int max=a[0];
    for(int i=1;i<a.length;i++) {
      if(a[i]>max)
        max=a[i];
    }
    int maxLength=(max+"").length();
    int [][] bucket=new int [10][a.length];
    int [] bucketCount=new int [10];
    for(int k=0,n=1;k<maxLength;k++,n*=10) {
      for(int i=0;i<a.length;i++) {
        int dight=a[i]/n%10;
        bucket[dight][bucketCount[dight]]=a[i];
        bucketCount[dight]++;
      }
      int index=0;
      for(int i=0;i<10;i++) {
        if(bucketCount[i]!=0) {
          for(int j=0;j<bucketCount[i];j++) {
            a[index]=bucket[i][j];
            index++;
          }
        }
        bucketCount[i]=0;
      }
    }
  } 
}

以上代码仅供参考


目录
相关文章
|
4月前
|
Java
基数排序(java)
基数排序(java)
|
搜索推荐 算法 Java
【算法】基数排序的原理与Java实现
基数排序(Radix Sort)是一种非比较性的排序算法,它根据元素的位数逐位进行排序。基数排序的核心思想是将待排序的元素按照低位到高位的顺序进行排序,每一位都使用稳定的排序算法(通常是计数排序或桶排序)。通过多次按位排序,最终可以得到有序的结果
101 0
|
12月前
|
搜索推荐 Java
深入了解基数排序:原理、性能分析与 Java 实现
基数排序(Radix Sort)是一种非比较性排序算法,它根据元素的每个位上的值来进行排序。基数排序适用于整数或字符串等数据类型的排序。
152 2
深入了解基数排序:原理、性能分析与 Java 实现
|
算法 Java
java实现基数排序
java实现基数排序
39 0
|
算法 搜索推荐 Java
经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
|
存储 人工智能 算法
八大排序算法Java实现(下)-快排、归排、基数排序
八大排序算法Java实现(下)-快排、归排、基数排序
156 0
八大排序算法Java实现(下)-快排、归排、基数排序
|
5天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
18 2
|
9天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
13天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
11天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
下一篇
无影云桌面