计数排序简介:计数排序顾名思义通过一个计数器把相同的数字放到一个桶子里面(也是一种桶排序,非比较排序)
计数排序代码实现:
package Sort;
import java.util.Arrays;
public class countSortDemo {
public static void main(String[] args) {
int[] arr={2,4,2,3,7,1,1,0,0,5,6,9,8,5,7,4,0,9};
int[] result=sort(arr);
System.out.println("排序后的数组"+Arrays.toString(result));
}
static int[] sort(int[] arr){
int[] result=new int[arr.length];
int[] count=new int[10];
for (int i=0;i< arr.length;i++){
count[arr[i]]++;
}
System.out.println("count计数数组"+Arrays.toString(count));
// for (int i=0,j=0;i<count.length;i++){
// while (count[i]-- >0)result[j++]=i;
// }//该算法不稳定
for (int i=1;i<count.length;i++){
count[i]=count[i]+count[i-1];
}
System.out.println("累加数组"+Arrays.toString(count));
for (int i= arr.length-1;i>=0;i--){
result[--count[arr[i]]]=arr[i];
}
return result;
}
}
基数排序:
依据最大数位数确定排序几次,分别按照个位十位..向桶中放数字,然后遍历桶则数有序,详细可见前面已发布文章基数排序。
代码实现:
package Sort;
import java.util.Arrays;
public class bubbleDemo {
public static void main(String[] args) {
int[] arr={123,43,56,23,766,98,965};
int[] result=sort(arr);
System.out.println(Arrays.toString(result));
}
public static int[] sort(int[] arr){
int[] result=new int[arr.length];
int[] count=new int[10];
for (int i=0;i<3;i++){
int division=(int)Math.pow(10,i);
for (int j=0;j< arr.length;j++){
int num=arr[j]/division%10;
count[num]++;
}
for (int m=1;m<count.length;m++){
count[m]=count[m]+count[m-1];
}
for (int n= arr.length-1;n>=0;n--){
int num=arr[n]/division%10;
result[--count[num]]=arr[n];
}
System.arraycopy(result,0,arr,0, arr.length);
Arrays.fill(count,0);
}
return result;
}
}