帮我写一个js的桶排序
时间: 2023-07-20 17:14:49 浏览: 73
当然可以,下面是一个 JavaScript 桶排序实现:
```javascript
function bucketSort(arr, bucketSize = 5) {
if (arr.length === 0) {
return arr;
}
// 找到数组中的最大值和最小值
let minValue = arr[0];
let maxValue = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < minValue) {
minValue = arr[i];
} else if (arr[i] > maxValue) {
maxValue = arr[i];
}
}
// 计算桶的数量
const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;
const buckets = new Array(bucketCount);
for (let i = 0; i < buckets.length; i++) {
buckets[i] = [];
}
// 将每个元素放入相应的桶中
for (let i = 0; i < arr.length; i++) {
buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]);
}
// 对每个桶中的元素进行排序并合并
const sortedArr = [];
for (let i = 0; i < buckets.length; i++) {
insertionSort(buckets[i]); // 可以使用其他排序算法对桶内元素进行排序
sortedArr.push(...buckets[i]);
}
return sortedArr;
}
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
const temp = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
```
使用示例:
```javascript
const arr = [5, 2, 7, 3, 6, 1, 4];
const sortedArr = bucketSort(arr);
console.log(sortedArr); // [1, 2, 3, 4, 5, 6, 7]
```
阅读全文