一、基数排序思想

​ 相比其它排序,主要是利用比较和交换,而基数排序则是利用分配和收集两种基本操作。基数 排序是一种按记录关键字的各位值逐步进行排序的方法。此种排序一般适用于记录的关键字为整数类型的情况。所有对于字符串和文字排序不适合。(O(d(n+k))* : n个d位数,取值范围[0,k],对于每一位,耗时O(n+k), 稳定排序)

实现:将所有待比较数值(自然数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

基数排序的两种方式:

  1. 高位优先,又称为最有效键(MSD),它的比较方向是由右至左; 从低位到高位
  2. 低位优先,又称为最无效键(LSD),它的比较方向是由左至右;(可能会出现错误)

二、图解

​ 其实,说实在的,就是先低位排,然后排高位,从而到最后是有序的,因为后一次排的要依赖前一次排的。举个例子,22,23,因为之前按个位数拍过序了,所以23在22后面,现在依次遍历,22肯定先于23判断,所以排在23前面。(代码是从后往前整的,但是道理是一个道理。)

三、代码:

public class Test1 {public static void main(String[] args) {int []arr= {80,14,8,92,26,73,41,67,33};radixSort(arr);System.out.println(Arrays.toString(arr));}/*** 高位优先法(MSD)从低到高** @param arr 待排序列,必须为自然数*/private static void radixSort(int[] arr){// 代排序列最大值int max=arr[0];// 指数int exp;// 计算最大值for(int val : arr) {max=Math.max(max,val);}for(exp=1;max/exp>0;exp*=10) {// 存储待排元素的临时数组int []temp=new int [arr.length];// 分桶个数int[] buckets=new int[10];// 将数据出现的次数存储在buckets中for(int val :arr) {// (val/exp)%10:value的最低位(个数)int zuiDiWei=(val/exp)%10;buckets[zuiDiWei]++;}//更改buckets[i],前缀和,确定每个数的位置for(int i=1;i<10;i++) {//System.out.print(buckets[i]+" ");buckets[i]+=buckets[i-1];}// 将数据存储到临时数组temp中// 大的在后面  所以倒序,很巧妙for(int i=arr.length-1;i>=0;i--){int zuiDiWei=(arr[i]/exp)%10;temp[buckets[zuiDiWei]-1]=arr[i];buckets[zuiDiWei]--;}//将有序元素temp赋给arrSystem.arraycopy(temp,0,arr,0,arr.length);//System.out.println(Arrays.toString(arr));}}
}

《基数排序》基数排序详解相关推荐

  1. 经典排序算法(10)——基数排序算法详解

    基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较. 一.算法基本思想 (1)基本思想 基数排序是基于桶排序来实现.通过键值的部分 ...

  2. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  4. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  5. 十大经典排序算法-希尔排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  6. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  7. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  8. 【算法知识】详解基数排序算法

    已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 [算法知识]详解快速排序算法 [算法知识]详解归并排序算法 基本思想 基数排序的思想是将整数按位数切 ...

  9. js排序算法详解-基数排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-基数排序 其实基数排序和桶排序挺类似的,都是找一个容器把属于同一类的元素装起来,然后进行排序.可以把基数排序类 ...

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

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

最新文章

  1. 聊聊高并发系统之队列术
  2. 计算机组成asr实验,计算机组成与结构实验讲义.doc
  3. es5.0 安装head插件
  4. 计算机程序的建立命令,数控车床编程指令 编程由一系列的指令组成
  5. 风变的python课程怎么样_风的解释|风的意思|汉典“风”字的基本解释
  6. jquery user interface
  7. 华为P30真机屏幕盖板曝光:超窄边框水滴屏
  8. 2018百度之星程序设计大赛 - 资格赛 P1006三原色图(MST,并查集)
  9. 07. Declare destructors virtual in polymorphic base classes
  10. 全国多年平均相对湿度空间分布数据
  11. 三菱5uplc伺服电机指令_?2020/9/12三菱PLC触摸屏控制POWSD-伺服电机
  12. JAVA综合实习报告
  13. 利用uncode-schedule(冶卫军)构建分布式任务调度
  14. phpmywind目录结构
  15. 前端笔记1 HTML基础
  16. MT8732 / MT8735处理器特点/芯片组型号资料介绍
  17. 高仿2017手机QQ
  18. db2 如何 将 oracle CONNECT BY 移植到 DB2
  19. 计算机安装重装出现错误,电脑重装系统老是失败要怎么办?我教你几个方法,一定能装上去!...
  20. 如何在嵌入式fpga系统下关闭pcap打开icap核用以重构

热门文章

  1. What's TM?
  2. C语言中在写输入代码时,在几个%d之间不加空格分开,与用逗号分开,以及采用a=%d,这样写的输入代码有什么区别呢?
  3. GD32f303 flash加密
  4. matlab计算aqi的程序,计算AQI
  5. 自媒体必备素材库,免费、商用,赶紧马住~
  6. 华为服务器防护系统,服务器主机安全防护
  7. [ecshop ectouch调试] ectouch 调试 68ecshop ecmoban 等网站的代码 的调试
  8. [33期] 我不管你们信不信,反正我是信了!
  9. [LaTex]LaTex中的公式标签|多公式标签
  10. The job failed. Unable to determine if the owner (SINOOCEANLAND\v-baidd) of job sendmail has server