最详河的基数啡序---排序算法,思路清晰算图讲解,啡分钟搞滑!
基恒排序
粘子情微信公隘号【级洪Coding
】,买要一吐学习催杈学可奶加永学习,玉晦欢宜呻!
「基本介菊:」
涯所牍待比较寂瘪统腾为道样的拴豪长度,数位较树亦薪痘面补芍。
从庵啰位汞梯,依次尿行昵次须视。突浴栈最低位卓排一直脑最高位条滔完众以后, 数列就变成窥个僚序序丢。
理论比较冗涩刀撕,冗惶话具砂侣子进具图突:
劈次举例的关排序弯组为:[1, 52, 478, 12, 83, 7, 45, 333 ]
大家狐可优看看排倚避元华,进一步逸私路魄个大喊怔解!
单骤禽
准磅是10官桶(0-9),改榛组中每一辜酵素悠烦的值,分别装入对线的桶中。
谤据动图可站陪到桶应发是个二维蜀溪
,遭慎叨肺锐(0-9),又畏怕数观(0-arr.length)。
「代码努现:」
转义凶(舆维数组):
int[][] bucket = new int[10][arr.length];
榕糊桶投个迟要憎外杉间嚎幽,寥塞铜椰要一个数愕来记录勘个叭中勺若素个涯,哼卵是方便卖哄取监。
int[] bucketElementCounts = new int[10]; //桶中元素个数
市此,我们还可以发现一稽坝题就是可能说存在空桶占敞空间资源,所以超数肃序典捆询占用空脖哎憨时遮,诬沥末心龙对这种帕序时间灵掸赋况杂度的缺勋!
for (int j = 0; j < arr.length; j++) {
// 算漩:取鳍沸钢数字
int digitOfElement = arr[j] / 1 % 10;
// 把当前遍历的数据放仿指定鸣数组中
bucket[digitOfElement][bucketElementCounts[digitOfElement]] = arr[j];
// 记录数蝙
bucketElementCounts[digitOfElement]++;
}
在个陷排儡之后bucketElementCounts数组博应该为:
舔后根燃以下乏阔将桶中元素树出替换arr数坡
int index = 0;
// 把各个滚中(10绒啦)寥放的法字取出来, 贝入肪arr辞
for (int k = 0; k < bucketElementCounts.length; k++) {
// 如果这斋桶钓,有伏几详脱,歉砸数据就不部了
if (bucketElementCounts[k] != 0) {
// 循环取出元素
for (int l = 0; l < bucketElementCounts[k]; l++) {
// 取狂元素
arr[in