Java七武器----排序算法之基数排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37979178/article/details/87784417

最近在学习排序算法一直在思考一件事情就是知其然与知其所以然,因为算法可以通过记忆记住写法,我们根本无需了解为什么只需记住其形还有结果进行运用就OK了,那么在学习的过程中我们还有必要知道其实现原理知其所以然吗?为此我在知乎提了两个相关的问题,欢迎大家积极讨论。(https://www.zhihu.com/question/312122688,https://www.zhihu.com/question/312097858)

基数排序

基数排序的实现原理

基数排序有别于其他排序,他是一种全新的排序方式,但对这种排序方式的理解一样需要我之前提到的宏观-微观思想,基数排序从排序过程来看主要就是:1. 个位排序,十位排序,百位排序。。。2. 赋值从小到大,取值一样从小到大。3. 本位排序只是将低于本位的数排序同时为高位排序做准备,对于高于本位的数据没有实际意义(简言之基数排序的关键就是各个位数的拆分对比)。

代码实现

public class ArithmeticUtil{
	public static int[] radixSort(int[] a,int n){
		int length=n;
		int divisor=1;
		//二维数组确定行列
		int[][]bucket=new int[10][length];
		//单列的个数默认值为0
		int[] count=new int[10];
		//位数的具体值
		int digit;
		//for循环的次数代表比较数列中的最高位4代表的是百位
		for(int i=1;i<4;i++){
			for(int temp:a){
				digit=(temp/divisor)%10;
				bucket[digit][count[digit]++]=temp;
			}
			int k=0;
			for(int j=0;j<10;j++){
				if(count[j]==0){
					coutinue;
				}
				for(int w=0;w<count[j];w++){
					a[k++]=bucket[j][w];
				}
				//将表示同位数相等出现的次数置零方便更高位计数
				count[j]=0;
			}
			
			divisor*=10;
		}
		return a;


	}





}


猜你喜欢

转载自blog.csdn.net/qq_37979178/article/details/87784417
今日推荐