目录
三种排序比较概括:
计数排序
public class CountSort {
public static void countSort(int[] arr){
//找到最大值最小值
int max= util.util.findMax(arr);
int min= util.util.findMin(arr);
//数值转下标, helper的值是arr的值,建立helper[max+1-min+1]辅助数组, 记录出现的次数
int[] helper= new int[max-min+1];
//会有负值,正值, 计数时下标arr[i]减去再-min; 0下标不要
for (int i = 0; i < arr.length; i++) {
helper[arr[i]-min]++;
}
//下标转数值, help[]遍历覆盖原数组
int index=0; //arr的下标
for (int h = 0; h < helper.length; h++) {
while (helper[h]>0 && h < helper.length){ //是while不是if!! 忘记了!!!
arr[index]=h+min; //注意这里,加减改变了
index++;
helper[h]--; //防止有重复
}
}
}
public static void main(String[] args) {
int[] arg={-123,0,-2,54,23,5454};
System.out.println(Arrays.toString(arg));
countSort(arg);
System.out.println(Arrays.toString(arg));
}
}
桶排序
原理动态演示:Bucket Sort Visualization
- 入桶: 将范围内的数据事先划分为n个"桶", 桶是有先后顺序的, 所以根据数据的大小分进相应编号的桶; 进入桶内后有一个插入排序/冒泡排序的过程, 这样桶内的数据就有序了.
- 出桶: 因为桶之间是有顺序有编号的,所以出桶的步骤就是按桶的顺序覆盖原数组, 这样数组就有序了