10计数排序

35 阅读1分钟

10计数排序

基本思想:设计一个比元素组中最大值大1的数组,将所有元素作为新数组的下标进行填入,最后按照新数组从小到大顺序输出即可。
讲解:
//创建一个名为Count_sort的方法,传入待排数组a及其大小
public static void Count_sort(int a[],int len){
    //假设最大值max为a[0],最小值min也是a[0]
    int max = a[0],min = a[0];
    //遍历所有元素,找出数组中的最大值max和最小值min
    for(int i = 0;i < len;i++){
        if(a[i] > max){
            max = a[i];
        }
        if(a[i] < min){
            min = a[i];
        }
    }
    //变量range为最大值 - 最小值 + 1,即需要的新数组大小
    int range = max - min + 1;
    //创建新数组countArr,大小为range
    int[] countArr = new int[range];
    //遍历所有元素
    for(int i = 0;i < len;i++){
        //将当前元素 - 最小值元素min的结果作为新数组的下标,进行+1
        countArr[a[i] - min]++;
    }
    //定义其实位置j=0
    int j = 0;
    //遍历整个新数组
    for(int i = 0;i < range;i++){
        //while循环条件:只要countArr数组中的值不为0
        while(countArr[i]-- != 0){
            //就将当前的i值加上min值 = 原数组中的值
            //再将这个初始值依次放入原数组a中
            a[j] = i + min;
            //j + 1,代表原数组a的下一个空位
            j++;
        }
    }
}