桶排序(Bucket Sort)
桶排序(Bucket Sort)
冒泡排序是一种简单的排序算法。它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
示例
3
5
7
8
4
1
6
9
2
点我排序
vue
<script setup lang="ts">
import {reactive} from "vue";
const BucketSortList = reactive({
BucketSortList:[3,5,7,8,4,1,6,9,0]
})
const BucketSortClick= ()=>{
BucketSort(BucketSortList.BucketSortList)
}
function BucketSort(arr, bucketSize = 5) {
if (arr.length === 0) {
return arr;
}
let minValue = arr;
let maxValue = arr;
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).fill().map(() => []);
for (let i = 0; i < arr.length; i++) {
const bucketIndex = Math.floor((arr[i] - minValue) / bucketSize);
buckets[bucketIndex].push(arr[i]);
}
arr.length = 0;
for (let i = 0; i < buckets.length; i++) {
if (buckets[i].length > 0) {
insertionSort(buckets[i]);
arr.push(...buckets[i]);
}
}
return arr;
}
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
const currentValue = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > currentValue) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = currentValue;
}
}
</script>
<template>
<p>{{JSON.stringify(BucketSortList.BucketSortList)}}</p>
<h4 @click="BucketSortClick">点我排序</h4>
</template>
<style scoped lang="scss">
</style>