黑马程序员技术交流社区

标题: 分享,Java基数排序的算法实现 [打印本页]

作者: heshiwei    时间: 2015-10-7 16:19
标题: 分享,Java基数排序的算法实现
(1)基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class radixSort {
  4.     inta[]={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};
  5.         public radixSort(){
  6.            sort(a);
  7.            for(inti=0;i<a.length;i++){
  8.                           System.out.println(a[i]);
  9.            }
  10.     }               
  11.         public  void sort(int[] array){  
  12.            //首先确定排序的趟数;  
  13.            int max=array[0];  
  14.            for(inti=1;i<array.length;i++){  
  15.                         if(array[i]>max){  
  16.                           max=array[i];  
  17.                         }  
  18.            }  
  19.            int time=0;  
  20.            //判断位数;  
  21.            while(max>0){  
  22.                   max/=10;  
  23.                    time++;  
  24.            }  

  25.                 //建立10个队列;  
  26.            List<ArrayList> queue=newArrayList<ArrayList>();  
  27.            for(int i=0;i<10;i++){  
  28.                           ArrayList<Integer>queue1=new ArrayList<Integer>();
  29.                    queue.add(queue1);  
  30.            }  

  31.            //进行time次分配和收集;  
  32.            for(int i=0;i<time;i++){  
  33.                    //分配数组元素;  
  34.                   for(intj=0;j<array.length;j++){  
  35.                            //得到数字的第time+1位数;
  36.                                  int x=array[j]%(int)Math.pow(10,i+1)/(int)Math.pow(10, i);
  37.                                  ArrayList<Integer>queue2=queue.get(x);
  38.                                  queue2.add(array[j]);
  39.                                  queue.set(x, queue2);
  40.                   }
  41.                   int count=0;//元素计数器;  
  42.                   //收集队列元素;  
  43.                   for(int k=0;k<10;k++){
  44.                            while(queue.get(k).size()>0){
  45.                                    ArrayList<Integer>queue3=queue.get(k);
  46.                                    array[count]=queue3.get(0);  
  47.                                    queue3.remove(0);
  48.                                    count++;
  49.                            }
  50.                   }  
  51.            }            
  52.         }
  53. }
复制代码



1347009583_9101.jpg (131.14 KB, 下载次数: 5)

1347009583_9101.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2