经典排序算法之基数排序

1. 基数排序

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

2. LSD 基数排序动图演示

3.排序思路

想一下平时对比两个时间大小是如何进行比较的。一般都是先对比年份,如果年份大的肯定就大。接下来再对比月份,然后日。为什么这么比较呢,因为权重不一样权重顺序是:年>月>日

而基数排序的思路跟这个有点类似。将每一个数分成一位数一位数的方式进行排序。例如

4.代码演示

package com.ma.sort;import java.util.Arrays;//基数排序
public class BasicSort {public static void main(String[] args) {int[] array = new int[]{42,58,155,45,36,35,492};basicSort(array);}public static void basicSort(int[] array){//1.得到数组中最大的位数int max = 0;for (int i = 0; i < array.length; i++) {if (array[i] > max){max = array[i];}}//得到最大数是几位int length = (max+"").length();/** 定义一个二维数组,表示十个桶* 说明:* 1.二维数组包含十个一维数组* 2.为了防止在放入数的时候,数据溢出,则每一个一维数组,大小定义为 arr.length()* 3.基数排序是空间换时间的经典算法* */int[][] bucket = new int[10][array.length];//为了记录每个桶中存放了多少个数据。我们定义一个一维数组来记录各个桶中每次放入数据的个数//比如 bucketElementCount[1]  就表示bucket[1]桶中的数据个数int[] bucketElementCount = new int[10];//这里我们使用循环将代码进行处理for (int i = 0, n = 1; i < length; i++, n *= 10) {//针对每个元素的对应位进行排序处理,第一次是个位,第二次是十位,第三次是百位。。。。for (int j = 0; j < array.length; j++) {//取出每个元素对应位的值int digitOfElement = array[j] / n % 10;//放入到对应的桶中bucket[digitOfElement][bucketElementCount[digitOfElement]] = array[j];bucketElementCount[digitOfElement]++;}//按照这个桶的顺序,(一维数组的下标,依此取出数据放到原数组)int index = 0;//遍历每一桶,并将每一桶的数据,放入到原数组for (int k = 0; k < bucketElementCount.length; k++) {//如果桶中有数据,我们取出,然后放回原数组if (bucketElementCount[k] != 0){//循环该桶(即第k个一维数组),放入for (int l = 0; l < bucketElementCount[k]; l++) {array[index++] = bucket[k][l];}}//当把每个桶中数据取出后,需要将每个 bucketElementCounts[k] = 0 !!!!bucketElementCount[k] = 0;}System.out.println("第"+(i+1)+"轮,对个位的排序处理 arr =" + Arrays.toString(array));}}
}

ntln(“第”+(i+1)+“轮,对个位的排序处理 arr =” + Arrays.toString(array));

    }}

}


经典排序算法之基数排序相关推荐

  1. 经典排序算法之基数排序(C语言版)

    排序算法之基数排序的C语言实现. #include "math.h" #include "stdio.h"/* * 基数排序 2016-04-18 23:43: ...

  2. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  3. 【GIF动画+完整可运行源代码】C++实现 基数排序——十大经典排序算法之十

    十大经典排序算法系列博客-->传送门 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最 ...

  4. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  5. 十种经典排序算法精粹(c语言版本)

    下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...

  6. 十大经典排序算法动画与解析,看我就够了

    作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...

  7. 十大经典排序算法(建议收藏)

    来自:Damonare的个人博客 原文:http://blog.damonare.cn/2016/12/20/十大经典排序算法总结(javascript描述)/ 0.算法概述  0.1 算法分类 十种 ...

  8. [经典排序算法][集锦]

    经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处 这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教 大多数排序算法都给出了每一步的状态,以方便初学者 ...

  9. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

最新文章

  1. HDU 5375 Gray code
  2. 看完这篇文章之后,终于明白了编译到底怎么回事。
  3. 4、修改用户(RENAME USER)
  4. hdu 3081(并查集+最大流)
  5. java在frame怎么计时_java – 退出jframe时的Swing stop计时器
  6. 微博air客户端_打磨近十年,接近「完美」的 macOS 第三方微博客户端:Maipo
  7. 被嘲“狗都不如”的那个人,年入1000万了
  8. mysql mongodb binlog_订阅MongoDB的数据变更比解析mysql的binlog更简单
  9. C++11 新特性整理(2)
  10. 持续交付2.0 pdf_便捷下载发布v7.2.0版本更新
  11. oracle导入dmp文件出错,IMP导入时的错误以及解决办法
  12. GV7704的中文资料
  13. 虚拟机运行win95
  14. 如何写一份高可读性的软件工程设计文档
  15. win10插入耳机没声音解决办法
  16. 计算H时M分S秒以后是_最全的风机计算公式,学习了!
  17. EasyRecovery15Mac全面好用的苹果电脑数据恢复app
  18. CCNET的参考文件
  19. 搭建私有云:owncloud(用Docker构建owncloud私有云盘)
  20. x86-64汇编入门

热门文章

  1. 2023-04-23 学习记录--C/C++-函数
  2. 洛谷P3003 苹果交货Apple Delivery
  3. 正念诱导的内源性θ刺激引起自我超越与抑制成瘾行为
  4. DWG格式解析库---libredwg 快速使用(Win10 + QT)
  5. joinquant 策略
  6. net-snmp子代理开发
  7. Bear | XMind | Effie 那些网文作者的生产力工具
  8. Vue按钮控制身份证号码显示隐藏中间部分
  9. NTP的配置总结(整理+转载)
  10. 在ubuntu12.04上安装部署foreman