1、计数排序
package suanfa; import java.util.Arrays; public class MySort { public void countingSort(int[] data){ int max=data[0]; int min=data[0]; for(int value:data){ if(value<min){ min=value; } if(value>max){ max=value; } } int[] temp=new int[max-min+1]; for(int value:data){ temp[value-min]++; } int index=0; for(int i=0;i<temp.length;i++){ while(temp[i]>0){ data[index++]=i+min; temp[i]--; } } } public static void main(String[] args){ int[] data=new int[]{9,8,7,65,4,3,32,223,1}; MySort mySort=new MySort(); mySort.countingSort(data); for(int value:data){ System.out.println(value); } } }
2、基数排序
package suanfa; import java.util.Arrays; public class MySort { public void radixSort(int[] data){ int[][] bucket=new int[10][data.length]; int max=data[0]; for(int value:data){ if(value>max){ max=value; } } int len=(max+"").length(); for(int i=0;i<len;i++){ int[] index=new int[10]; for(int value:data){ int x=(int)(value/Math.pow(10,i))%10; bucket[x][index[x]++]=value; } int s=0; for(int k=0;k<10;k++){ for(int j=0;j<index[k];j++){ data[s++]=bucket[k][j]; } } } } public static void main(String[] args){ int[] data=new int[]{9,8,7,65,4,3,32,223,1}; MySort mySort=new MySort(); mySort.radixSort(data); for(int value:data){ System.out.println(value); } } }
这个基数排序也可以用于字符串的字典序排序(逐位比较)先比较最低位,最低位数相同的放进桶中,然后再比较十位、百位。。。。。。。