本帖最后由 张周飞 于 2014-7-13 10:02 编辑
8、基数排序 (1)基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 (2)实例:
(3)用java实现 1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class radixSort { 5 int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,101,56,17,18,23,34,15,35,25,53,51}; 6 public radixSort(){ 7 sort(a); 8 for(int i=0;i<a.length;i++) 9 System.out.println(a); 10 } 11 public void sort(int[] array){ 12 13 //首先确定排序的趟数; 14 int max=array[0]; 15 for(int i=1;i<array.length;i++){ 16 if(array>max){ 17 max=array; 18 } 19 } 20 21 int time=0; 22 //判断位数; 23 while(max>0){ 24 max/=10; 25 time++; 26 } 27 28 //建立10个队列; 29 List<ArrayList> queue=new ArrayList<ArrayList>(); 30 for(int i=0;i<10;i++){ 31 ArrayList<Integer> queue1=new ArrayList<Integer>(); 32 queue.add(queue1); 33 } 34 35 //进行time次分配和收集; 36 for(int i=0;i<time;i++){ 37 38 //分配数组元素; 39 for(int j=0;j<array.length;j++){ 40 //得到数字的第time+1位数; 41 int x=array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i); 42 ArrayList<Integer> queue2=queue.get(x); 43 queue2.add(array[j]); 44 queue.set(x, queue2); 45 } 46 int count=0;//元素计数器; 47 //收集队列元素; 48 for(int k=0;k<10;k++){ 49 while(queue.get(k).size()>0){ 50 ArrayList<Integer> queue3=queue.get(k); 51 array[count]=queue3.get(0); 52 queue3.remove(0); 53 count++; 54 } 55 } 56 } 57 58 } 59 60 }
------------------------------------------------------------------------------------------
{:3_60:}就写到这里:愿能帮助大家解决和理解java排序知识和技巧.... ------------------------------------------------------------------------------------------
|