java计数排序_赋值

package sort;

import java.util.Arrays;

/**
* 计数排序
* 将待排序元素的值作为下标放入一个新数组中,并给一个计数器数组,然后遍历输出下标即可,如果有相同的元素则让计数器数组中的元素加1
*/
public class CountSort {
public static void main(String[] args) {
int[] arr = {34, 25, 18, 1, 3, 4, 3, 2, 1, 35};

System.out.println(Arrays.toString(countSort(arr)));
}

//先拿到它的最大值
public static int[] countSort(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max)
max = arr[i];
}
//确定计数数组的长度
int[] countArr = new int[max + 1];
for (int i = 0; i < arr.length; i++) {
countArr[arr[i]]++;/*将数组中的值赋值给下标,如果出现了相同的值,则计数数组的值+1
例如第一次存3,计数器中countArr[3]这个值就为1,当第二次再出
现3的时候就为2了*/
}
//这里我用了一个新数组来保存排序后的数组
int index = 0;
int[] newArr = new int[arr.length];
for (int i = 0; i < countArr.length; i++) {//外循环用于从小到大输出所有存在的数
for (int j = 0; j < countArr[i]; j++) {//内循环用来输出次数
newArr[index++] = i;//直接将下标赋给新数组即可
}
}
return newArr;
}
}