基于数字区间重力雨点分发、桶内局部插入排序及底部顺序收集,非比较基准极速分布演练
桶排序(Bucket Sort)是一种工作原理为将数组分发到有限数量的桶子里的分布类排序算法。每个桶再个别排序,最终依次收集拼接。
其核心运行流程如下:
idx = arr[i] / bucket_range,并将其平滑丢入对应的桶中。时间复杂度为 $O(N)$。Insertion Sort)进行桶内排序。🚀 时空复杂度分析: 在元素分布非常均匀(Uniform Distribution)的理想状态下,每个桶仅分得 $N/K$ 个元素。若桶内采用 $O(M \log M)$ 排序,总时间复杂度为 $O(N + K \cdot \frac{N}{K} \log \frac{N}{K})$。当 $K \approx N$ 时,时间复杂度逼近极限 $O(N)$!
void bucketSort(int arr[], int n) {
// 1. 创建 5 个子区间桶
vector<int> buckets[5];
// 2. 扫描数组分发入对应的桶中
for (int i = 0; i < n; i++) {
int idx = arr[i] / 10; // 计算桶索引
buckets[idx].push_back(arr[i]);
}
// 3. 桶内排序并顺序收集写回
int index = 0;
for (int i = 0; i < 5; i++) {
// 对非空桶执行插入排序
sort(buckets[i].begin(), buckets[i].end());
for (int x : buckets[i]) {
arr[index++] = x; // 顺序写回
}
}
}