排序算法-基数排序

    基数排序是一种非比较排序算法,它将待排序的数字按照位数进行排序。基数排序的思想是先按照个位数进行排序,然后按照十位数进行排序,接着按照百位数进行排序,以此类推,直到最高位排序完成。

    基数排序的步骤如下:

 

代码思路:

class RadixSort{
	public static void redixSort(int[] arr){
		if (arr==null || arr.length <2){
			return;
		}
		redixSort(arr,0,arr.length-1,maxbits(arr));
	}


	//求最大数有多少位
	private static int maxbits(int[] arr) {
		int max = Integer.MIN_VALUE;
		for(int a: arr){
			max=Math.max(max,a);
		}
		int res=0;
		while (max != 0){
			res++;
			max/=10;
		}
		return res;
	}

	private static void redixSort(int[] arr, int l, int r, int digit) {
		final int radix=10;
		int i=0,j=0;
		//定义一个与arr长度相等的数组
		int[] help =new int[r-l+1];
		//有多少位就循环几次,从个位开始
		for (int d=1;d<=digit;d++){
			//count和count‘都用count表示
			//count[0] 当前位(d位)是0的数字有多少个
			//count[1] 当前位(d位)是(0和1)的数字有多少个
			//count[2] 当前位(d位)是(0和1和2)的数字有多少个
			//count[i] 当前位(d位)是(0~i)的数字有多少个
			int[] count=new int[radix];//count[0..9]
			//count
			for (i=l;i<=r;i++){
				j=getDigit(arr[i],d);
				count[j]++;
			}
			//count’
			for (i=1;i<radix;i++){
				count[i]=count[i]+count[i-1];
			}
			//从右往左遍历,对应的数放到help中
			for (i=r;i>=l;i--){
				j=getDigit(arr[i],d);
				help[count[j]-1] = arr[i];
				count[j]--;
			}
			//help数组赋值给结果数组
			for (i=l, j=0;i<=r;i++,j++){
				arr[i] =help[j];
			}
		}

	}

	//取出当前数对应位数的数,如x=109,d=1,相当于取109个位上的数,即9
	private static int getDigit(int x,int d){
		return ((x/((int) Math.pow(10,d-1))) % 10);
	}
}

相关推荐

  1. 排序算法——基数排序

    2024-04-15 06:34:03       61 阅读
  2. [排序算法]基数排序

    2024-04-15 06:34:03       30 阅读
  3. 算法基数排序

    2024-04-15 06:34:03       38 阅读
  4. 程序分享--排序算法--基数排序

    2024-04-15 06:34:03       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 06:34:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 06:34:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 06:34:03       87 阅读
  4. Python语言-面向对象

    2024-04-15 06:34:03       96 阅读

热门阅读

  1. C语言--内存函数

    2024-04-15 06:34:03       40 阅读
  2. Zookeeper+Kafka

    2024-04-15 06:34:03       37 阅读
  3. Flume配置案例@Source:Kafka,Channel:File,Sink:HDFS

    2024-04-15 06:34:03       32 阅读
  4. 计算机视觉(CV)技术的优势和挑战

    2024-04-15 06:34:03       34 阅读
  5. python课本基础练习——列表推导式

    2024-04-15 06:34:03       36 阅读
  6. 2024/4/12 网络编程day2

    2024-04-15 06:34:03       38 阅读
  7. 初识DOM

    初识DOM

    2024-04-15 06:34:03      37 阅读
  8. 双向冒泡算法(C语言版)

    2024-04-15 06:34:03       38 阅读