计数排序

package demo;

import java.util.Arrays;

public class P49 {
//计数排序
//思路为用辅助空间下标对应元素值,下标放的值对应元素出现次数。然后遍历辅助空间,就能有序填回原来数组。
//适用于数据密集并且峰值较小的数组,否则会浪费很多空间
	public static void main(String[] args) {
		int[] arr= {10,3,15,7,20};
		countSort(arr);
		System.out.println(Arrays.toString(arr));
	}

	static void countSort(int[] arr) {
		int maxValue=arr[0];
		for(int i=1;i<arr.length;i++) {
			if(arr[i]>maxValue) {
				maxValue=arr[i];
			}
		}
		
		int[] help=new int[maxValue+1];
		for(int i=0;i<arr.length;i++) {		//对出现次数进行计数
			help[arr[i]]++;
		}
		
		int arrIndex=0;
		for(int i=0;i<help.length;i++) {
			while(help[i]>0) {
				arr[arrIndex++]=i;
				help[i]--;
			}
		}
		
	}
}
posted @ 2022-05-02 19:53  fighterk  阅读(19)  评论(0)    收藏  举报