Skip to content

桶排序(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>

不知道说啥了很无语了