zoukankan      html  css  js  c++  java
  • 桶排序与基数排序代码(JAVA)

     
    桶排序
    1. publicstaticvoid bucketSort(int[] a,int max){
    2.         int[] buckets;
    3.  
    4.         if(a==null || max<1)
    5.             return;
    6.      
    7.         buckets =newint[max]; // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。
    8.  
    9.         for(int i =0; i < a.length; i++) // 1. 计数
    10.             buckets[a[i]]++;
    11.        
    12.         for(int i =0, j =0; i < max; i++)  // 2. 排序
    13.         {
    14.             while((buckets[i]--)> 0)
    15.                 a[j++]= i;
    16.         }
    17.  
    18.         buckets = null;
    19. }
     
     
    基数排序
    1. /*
    2. * 获取数组a中最大值
    3. * 参数说明:a -- 数组 n -- 数组长度
    4. */
    5. int get_max(int a[],int n)
    6. {
    7.     int i, max;
    8.  
    9.     max = a[0];
    10.     for(i =1; i < n; i++)
    11.         if(a[i]> max)
    12.             max = a[i];
    13.     return max;
    14. }
    15.  
    16. /*
    17. * 对数组按照"某个位数"进行排序(桶排序)
    18. *
    19. * 参数说明:
    20.  *     a -- 数组
    21.  *     n -- 数组长度
    22.  *     exp -- 指数。对数组a按照该指数进行排序。
    23. *
    24. * 例如,对于数组a={50, 3, 542, 745, 2014, 154, 63, 616};
    25.  *    (01) 当exp=1表示按照"个位"对数组a进行排序
    26.  *    (02) 当exp=10表示按照"十位"对数组a进行排序
    27.  *    (03) 当exp=100表示按照"百位"对数组a进行排序
    28.  *    ...
    29. */
    30. void count_sort(int a[],int n,int exp)
    31. {
    32.     int output[n];             // 存储"被排序数据"的临时数组
    33.     int i, buckets[10]={0};
    34.  
    35.     for(i =0; i < n; i++) // 将数据出现的次数存储在buckets[]中
    36.         buckets[(a[i]/exp)%10]++;
    37.  
    38.     for(i =1; i <10; i++) // 更改buckets[i]。目的是让更改后的buckets[i]的值是该数据在output[]中的位置。
    39.         buckets[i]+= buckets[i -1];
    40.    
    41.     for(i = n -1; i >=0; i--) // 将数据存储到临时数组output[]中
    42.     {
    43.         output[buckets[(a[i]/exp)%10]-1]= a[i];
    44.         buckets[(a[i]/exp)%10]--;
    45.     }
    46.  
    47.     for(i =0; i < n; i++) // 将排序好的数据赋值给a[]
    48.         a[i]= output[i];
    49. }
    50.  
    51. /*
    52. * 基数排序
    53. * 参数说明:  a -- 数组 n -- 数组长度
    54. */
    55. void radix_sort(int a[],int n)
    56. {
    57.     int exp;    // 指数。当对数组按各位进行排序时,exp=1;按十位进行排序时,exp=10;...
    58.     int max = get_max(a, n);    // 数组a中的最大值
    59.  
    60.     for(exp =1; max/exp >0; exp *=10) // 从个位开始,对数组a按"指数"进行排序
    61.         count_sort(a, n, exp);
    62. }
     
     
     
     
     
     
     
     
     
     
     
     





  • 相关阅读:
    Redis详解----- 缓存穿透、缓存击穿、缓存雪崩
    mysql存储时间
    MAT入门到精通
    meven依赖思考记录
    线程池原理
    vscode + wsl2
    java架构师学习路线-高级
    java架构师学习路线-初级
    (二)垃圾回收
    (一)内存区域
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5535102.html
Copyright © 2011-2022 走看看