![](https://img.kancloud.cn/55/bd/55bdaa0253026d20564c7da9f8c3dcff_955x539.gif)
# JavaScript
~~~
function bucketSort(arr, bucketCount) {
// 计算最大、最小值
let minValue = arr[0]
let maxValue = arr[0]
for(let i=1;i<arr.length;i++) {
if(arr[i]<minValue) {
minValue = arr[i]
}
if(arr[i]>maxValue) {
maxValue = arr[i]
}
}
// 计算桶的跨度
let size = Math.floor((maxValue - minValue + 1) / bucketCount)
// 创建桶
let buckets = new Array(bucketCount + 1)
for(let i=0;i<buckets.length;i++) {
buckets[i] = []
}
// 向桶中放
for(let i=0;i<arr.length;i++) {
buckets[Math.floor((arr[i]-minValue) / size)].push(arr[i])
}
// 排序每个桶
arr.length = 0 // 清空原数组
for(let i=0; i<buckets.length; i++) {
insertSort(buckets[i]) // 之前写的插入排序
for(let j=0; j<buckets[i].length; j++) {
arr.push(buckets[i][j])
}
}
return arr
}
~~~