基数排序
时间:2021-08-11
本文章向大家介绍基数排序,主要包括基数排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简介
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。
图解
代码
public static void radixSort(int[] arr) {
int[] nums = new int[10];
int[][] bucket = new int[10][arr.length];
int element;
for (int j : arr) {
element = j % 10;
bucket[element][nums[element]] = j;
nums[element]++;
}
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
for (int j = 0; j < nums[i]; j++) {
arr[index++] = bucket[i][j];
}
}
nums[i] = 0;
}
System.out.println("第一轮======"+Arrays.toString(arr));
for (int j : arr) {
element = j /10 % 10;
bucket[element][nums[element]] = j;
nums[element]++;
}
index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
for (int j = 0; j < nums[i]; j++) {
arr[index++] = bucket[i][j];
}
}
nums[i] = 0;
}
System.out.println("第二轮======"+Arrays.toString(arr));
for (int j : arr) {
element = j /100 % 10;
bucket[element][nums[element]] = j;
nums[element]++;
}
index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
for (int j = 0; j < nums[i]; j++) {
arr[index++] = bucket[i][j];
}
}
nums[i] = 0;
}
System.out.println("第三轮======"+Arrays.toString(arr));
}
测试
int[] arr = { 26, 5, 317, 548, 64, 114};
radixSort(arr);
根据上面的代码可以得到以下代码
public static void radixSort2(int[] arr) {
int[] nums = new int[10];
int[][] bucket = new int[10][arr.length];
int element;
int maxIndex = 0;
int index = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[maxIndex] < arr[i]) {
maxIndex = i;
}
}
int maxLength = (arr[maxIndex] + "").length();
for (int i = 0,n = 1; i < maxLength; i++,n *= 10) {
for (int j : arr) {
element = j /n % 10;
bucket[element][nums[element]] = j;
nums[element]++;
}
index = 0;
for (int j = 0; j < nums.length; j++) {
if (nums[j] != 0) {
for (int k = 0; k < nums[j]; k++) {
arr[index++] = bucket[j][k];
}
}
nums[j] = 0;
}
System.out.println("第三轮======"+Arrays.toString(arr));
}
}
测试
int[] arr = { 26, 5, 317, 548, 64, 114};
radixSort2(arr);
可以发现结果是一样的
原文地址:https://www.cnblogs.com/ftlzypx/p/15128544.html
- Collaborative Filtering(协同过滤)算法详解
- 【Hadoop】三句话告诉你 mapreduce 中MAP进程的数量怎么控制?
- Spark系列课程-00xxSpark RDD持久化
- RDD持久化
- P02_Hadoop CDH 5.3.6集群搭建
- P01_Spark开发测试运行环境安装Spark开发测试运行环境安装
- spark2.x依赖包POM
- P03_Hive 安装
- P06_flume-ng-1.5.0-cdh5.3.6安装
- P04_zookeeper-cdh5集群搭建
- P05_kafka_2.9.2-0.8.1集群搭建
- 再探matplotlib
- 分布式系统(Distributed System)资料
- Python性能提升20倍居然不是标题党?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux tcpdump 命令详解与示例
- 手动搭建Hadoop分布式集群
- Ansible-安装配置
- React-Redux 100行代码简易版探究原理。
- Ansible-免密登录与主机清单Inventory
- 安装Ambari和HDP
- React中引入Vue3的@vue/reactivity 实现响应式状态管理
- Ansible Ad-Hoc与常用模块
- Ansible Playbook 初识
- Ansible Playbook 变量与 register 详解
- 初探 Spark ML 第一部分
- Ansible Facts 变量详解 添加用户账号Ansible 配置清单Inventory
- Ansible playbook 编程
- 前端工程师自检清单73答
- Ansible playbook Vault 加密