這篇文章講述了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中文網其他相關文章!