中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中桶排序的知識點有哪些

發布時間:2021-08-17 14:40:32 來源:億速云 閱讀:112 作者:小新 欄目:編程語言

小編給大家分享一下Java中桶排序的知識點有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1、桶排序思想

一個簡單例子:

對6個人的英語測試成績(1~10分)進行排序。假如分數是[6,5,8,8,10,9],用桶排序的思想就是準備10個桶,編號依次為1~10,將成績放入對應的桶中,例如6分放入6號桶,兩個8分放入8號桶...然后按照桶的標號順序逐一輸出(有就輸出,沒有就不輸出),這就是桶排序的基本思想。

事實上,這只是一個簡易版,試想一下,如果待排序的元素跨度范圍比較大,例如1~10000,是不是需要10000個桶?實際上這種情況下,一個桶里并非總放一個元素,很多時候一個桶里放多個元素。其實真正的桶排序和散列表有一樣的原理。

實際排序中,通常對每個桶中的元素繼續使用其他排序算法進行排序,所以更多時候,桶排序會結合其他排序算法一起使用。

2、桶排序代碼

在分析了桶排序的思想后,首先要知道待排序元素的范圍,以上述為例,聲明一個長度為10的數組作為10個桶,然后將成績逐一往桶中放時,該桶的值+1,最終輸出倒序輸出數組下標,數組每個位置的值為幾就輸出幾次,這樣就能實現基本的桶排序。

public class BucketSort {
  private int[] buckets;
  private int[] array;
  
  public BucketSort(int range,int[] array){
    this.buckets = new int[range];
    this.array = array;
  }
  
  /*排序*/
  public void sort(){
    if(array!=null && array.length>1){
      for(int i=0;i<array.length;i++){
        buckets[array[i]]++;
      }
    }
  }
  
  /*排序輸出*/
  public void sortOut(){
    //倒序輸出數據
    for (int i=buckets.length-1; i>=0; i--){
      for(int j=0;j<buckets[i];j++){
        System.out.print(i+"\t");
      }      
    }
  }
}

測試代碼:

public class SortTest {
  public static void main(String[] args) {
    testBucketsSort();
  }
  
  private static void testBucketsSort(){
    int[] array = {5,7,3,5,4,8,6,4,1,2};
    BucketSort bs = new BucketSort(10, array);
    bs.sort();
    bs.sortOut();//輸出打印排序
  }
}

3、桶排序性能特點

桶排序實際上只需要遍歷一遍所有的待排元素,然后依次放入指定的位置。如果加上輸出排序的時間,就要遍歷所有的桶。因此桶排序的時間復雜度是O(n+m),n是待排元素的個數,m是桶的個數,也就是待排元素的范圍。這個算法算是相當快的排序算法了,但是空間復雜度比較大。

當待排元素的大小范圍比較大,但待排元素個數比較少時,空間浪費就比較嚴重,待排元素分布月均勻,空間利用率越高,事實上這種情況很少見。

通過以上性能分析,可以得出桶排序的特點:速度快且簡單,但同時空間利用率較低。當待排數據跨度很大時,空間利用率是無法忍受的。

4、桶排序適用場景

根據桶排序的特點,桶排序一般適用于一些特定的環境,比如數據范圍較為局限或者有一些特定的要求,比如需要通過哈希映射快速獲取某些值,需要統計每個數的數量。但是這一切都以確認數據的范圍為前提,如果范圍跨度過大,則考慮用其他算法。

以上是“Java中桶排序的知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潮州市| 锦州市| 积石山| 马龙县| 富裕县| 丰台区| 镇巴县| 綦江县| 莲花县| 富阳市| 江口县| 柘城县| 营口市| 博兴县| 兰坪| 青阳县| 昭觉县| 甘南县| 鄂州市| 萨迦县| 达日县| 乌拉特后旗| 青阳县| 德江县| 小金县| 浑源县| 锡林浩特市| 开封县| 虹口区| 长汀县| 辉南县| 武强县| 镇坪县| 珠海市| 同江市| 银川市| 遂平县| 青铜峡市| 喀喇| 佳木斯市| 隆子县|