首頁  >  文章  >  web前端  >  JavaScript中的桶排序詳解

JavaScript中的桶排序詳解

韦小宝
韦小宝原創
2018-03-14 14:28:372628瀏覽

這篇文章講述了JavaScript中的桶排序,大家對JavaScript中的桶排序不了解的話或者對JavaScript中的桶排序感興趣的話那麼我們就一起來看看本篇文章吧, 好了廢話少說進入正題吧

桶排序是計數排序的升級版。它利用了函數的映射關係,高效與否的關鍵就在於這個映射函數的決定。

為了讓桶排序更有效率,我們需要做到這兩點:

1、在額外空間充足的情況下,盡量增加大桶的數量

#2、使用的映射函數能夠將輸入的N個資料均勻的分配到K個桶中

同時,對於桶中元素的排序,選擇何種比較排序演算法對於效能的影響至關重要。

什麼時候最快


當輸入的資料可以均勻的分配到每一個桶子中

#什麼時候最慢


當輸入的資料被分配到了同一個桶中

桶排序JavaScript程式碼實作:

function bucketSort(arr, bucketSize) {  
    if (arr.length === 0) {  
      return arr;  
    }  
  
    var i;  
    var minValue = arr[0];  
    var maxValue = arr[0];  
    for (i = 1; i < arr.length; i++) {  
      if (arr[i] < minValue) {  
          minValue = arr[i];                //输入数据的最小值  
      } else if (arr[i] > maxValue) {  
          maxValue = arr[i];                //输入数据的最大值  
      }  
    }  
  
    //桶的初始化  
    var DEFAULT_BUCKET_SIZE = 5;            //设置桶的默认数量为5  
    bucketSize = bucketSize || DEFAULT_BUCKET_SIZE;  
    var bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;     
    var buckets = new Array(bucketCount);  
    for (i = 0; i < buckets.length; i++) {  
        buckets[i] = [];  
    }  
  
    //利用映射函数将数据分配到各个桶中  
    for (i = 0; i < arr.length; i++) {  
        buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]);  
    }  
  
    arr.length = 0;  
    for (i = 0; i < buckets.length; i++) {  
        insertionSort(buckets[i]);                      //对每个桶进行排序,这里使用了插入排序  
        for (var j = 0; j < buckets[i].length; j++) {  
            arr.push(buckets[i][j]);                        
        }  
    }  
  
    return arr;}

以上就是本篇文章的所有內容,大家要是還不太了解的話,可以自己多實現兩邊就很容易掌握了哦!

相關推薦:
PHP實作桶排序演算法實例分享

以上是JavaScript中的桶排序詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn