• 桶排序(BucketSort)(java)


    一、原理

        桶排序的工作原理是吧区间划分为n个大小相同的子区间,这样的区间称为桶。然后将n个输入的数分步到各个桶中去。每个桶再个别的排序,然后按照次序吧各个桶

    中的元素列出来即可。

    二、时间复杂度

        桶排序是一种鸽巢排序的一种归纳结果。当要被排序阵列内的数值是均匀分配的时候,桶排序使用线性时间(O(n))。但桶排序并不是比较排序,它不受

    O(nlongn)下限的影响。

        eg:对大小为[1...1000]范围内的n个整数A[1..n]排序。可以把桶设置为大小为10的范围,具体而言设集合B[1]存储[1..10]的整数,集合B[2]存储(10..20]的整数,

    i=1,2,,100.总共100个桶然后扫描A[i],吧每个A[i]放入到对应的B[j]中。然后再对每个桶里的数字排序。

        假设有n个数字,有m个桶,如果数字是平均分布的,则每个桶里面平均有n/m个数字。如果每个桶里中的数字采用快速排序,那么整个算法的复杂度是

    O(n+m*n/m*log(n/m)) = O(n+nlogn-nlogm).当m接近n时,桶排序复杂度接近O(n)。


    三、代码
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Random;
    import java.util.List;

    public class BucketSort {    

        int bucketSize = 10    

        int arraySize = 1000;

        public static void main(String[] args) {
          // TODO Auto-generated method stub
          BucketSort bs = new BucketSort();
          int[] array = bs.getArray();
          bs.bucketSort(array);
        }

        public int[] getArray(){
          int[] arr = new int[arraySize /3];
          Random r = new Random();
          for(int i = 0; i < arraySize /3 ; i++)
          {
            arr[i] = r.nextInt(100000);
          }
          return arr;

        }

        public void bucketSort(int[] a)
        {
          List<Integer> bucket[] = new ArrayList[bucketSize];

          for(int i=0; i < a.length ; i++)
          {
            int temp = a[i]/10000;
            if(bucket[temp] == null)
            {
              bucket[temp] = new
              ArrayList<Integer>();
            }
            bucket[temp].add(a[i]);
          }

          //对桶内各个元素进行排序
          for(int j=0;j<bucketSize;j++)
          {
            intsertSort(bucket[j]);
            printList(bucket[j]);
          }
        }

        private void printList(List<Integer> list) {
          // TODO Auto-generated method stub
          while(list.size()>0)
          {
            System.out.print(list.remove(0) +" ");
          }
        }

        private void intsertSort(List<Integer> list) {
          // TODO Auto-generated method stub
          Collections.sort(list);
        }

    }

  • 相关阅读:
    Struts2_模块包含
    Struts2_访问Web元素
    Struts2_简单数据验证
    获取当前日期
    iOS NSMutableArray添加NSInteger元素
    iOS label换行 自适应
    iOS高德地图自定义annotation添加不同图片
    @property(nonatomic) UIViewAutoresizing autoresizingMask;
    HTML
    图片压缩
  • 原文地址:https://www.cnblogs.com/weiliuyby/p/8418828.html
Copyright © 2020-2023  润新知