请写一下桶排序的算法
时间: 2023-11-18 17:11:55 浏览: 64
桶排序是一种线性排序算法,它的基本思想是将待排序的元素分配到一定数量的桶中,然后对每个桶中的元素进行排序,最后依次将每个桶中的元素输出,从而得到有序的序列。
桶排序的算法步骤如下:
1. 创建一个定量的空桶子列表。
2. 遍历输入数据,并且把数据一个一个放到对应的桶子里去。
3. 对每个不是空的桶子进行排序。
4. 从不是空的桶子里把排好序的数据拼接起来。
以下是桶排序的 C++ 代码实现:
```cpp
void bucket_sort(int arr[], int n) {
const int bucket_size = 10; // 桶的数量,这里设为10
vector<int> buckets[bucket_size]; // 创建桶
int max_val = *max_element(arr, arr + n); // 获取最大值
for (int i = 0; i < n; i++) {
int bucket_idx = arr[i] * bucket_size / (max_val + 1); // 计算元素所在的桶编号
buckets[bucket_idx].push_back(arr[i]); // 把元素放入对应的桶中
}
for (int i = 0; i < bucket_size; i++) {
sort(buckets[i].begin(), buckets[i].end()); // 对每个桶中的元素进行排序
}
int idx = 0;
for (int i = 0; i < bucket_size; i++) {
for (int j = 0; j < buckets[i].size(); j++) {
arr[idx++] = buckets[i][j]; // 把排序后的元素依次放回原数组
}
}
}
```
桶排序的时间复杂度为O(n),但是需要额外的空间来存储桶,因此空间复杂度取决于桶的数量。
阅读全文