基数排序看这一篇就够了,看不懂你来打我!!!

一: 什么是基数排序 (简单的说就是从个位数开始,再排十位数,再排百位… 位数不够补0)

①基数排序属于“分配排序”, 它是通过键值的各个值,将要排序的的元素分配至某些桶中,达到排序的目的

②基数排序是属于稳定的排序,基数排序的效率高的稳定排序的排序法

③基数排序是桶排序的扩展

二: 我们需要用二维数组模拟 (0-9) 这几个数的桶,依次取出待排序的数,再进行取出

三: 我这里直接举例只有个位数的排序,多位数的就再写一遍即可

import java.util.Arrays;


public class Basic_Sort {

	public static void main(String[] args) {

		int arr[]={5,4,8,7,2,1,9,7,8,2};
		int temp[]=new int[arr.length];
		int[] sort = sort(arr,temp,0,arr.length-1);
		System.out.println(Arrays.toString(sort)); 
	}

	
	public static int[] sort(int arr[],int temp[],int begin,int end){
		
		int temps;
		
		// 把桶弄出来 二维数组模拟桶 
		int bucket[][]=new int[10][arr.length];
		
		// 记录桶中的数据  对应的是桶的深度 最多只有数据的个数  但是必须取值为 0-9 否则无法加入数据
		int recode[]=new int[10];
		
		// 往桶里存放数据
		for(int i=0;i<arr.length;i++){
			// 取出个位数
			temps=arr[i]%10;  // 542%10
			// 加入桶中  加到哪个桶?  temps 就代表了哪个桶   temps号桶的第 0 个开始加
			bucket[temps][recode[temps]]=arr[i];
			recode[temps]++;
		}
		
		// 取出数据,从桶里面取出数据
		// 从 1 号桶开始遍历,判断桶里面是否数据 来把桶中的数据取出 因为是从小到大开始遍历取出数据所以 所以数据的顺序是按照从小到大的顺序去获取数据
		int index=0;
		for(int i=0;i<bucket.length;i++){
			if(recode[i]!=0){
				for(int k=0;k<recode[i];k++){  //疑点 为什么是 < 因为数据是从1 开始算的
					temp[index]=bucket[i][k];
					index++;
				}
			}
			// 为了下一轮的后续使用 将记录数置为 0
			recode[i]=0;
		}
		
			return temp;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值