今日总结

今天了解了桶排序算法
时间复杂度:
平均时间复杂度: O(n + k),其中 n 是数据的数量,k 是桶的数量。
最坏时间复杂度: O(n^2),当所有数据都分配到同一个桶中时。
空间复杂度: O(n + k),需要额外的空间来存储桶和数据。
2. 算法步骤
初始化桶: 根据数据的范围创建一定数量的桶。
分配数据: 将每个数据分配到相应的桶中。
排序桶内的数据: 对每个桶内的数据进行排序(可以使用插入排序、快速排序等)。
合并桶: 将所有桶中的数据按顺序合并,得到有序序列。

include

include

include // For std::sort

// 桶排序函数
void bucketSort(float arr[], int n) {
if (n <= 0) return;

// 1. 创建桶
std::vector<float> buckets[n];

// 2. 将数据分配到桶
for (int i = 0; i < n; ++i) {
    int bucketIndex = static_cast<int>(n * arr[i]);  // 确定桶的位置
    if (bucketIndex >= n) {
        bucketIndex = n - 1;  // 确保索引不会越界
    }
    buckets[bucketIndex].push_back(arr[i]);  // 将元素添加到相应的桶中
}

// 3. 对每个桶内的数据进行排序
for (int i = 0; i < n; ++i) {
    std::sort(buckets[i].begin(), buckets[i].end());
}

// 4. 合并所有桶中的数据
int index = 0;
for (int i = 0; i < n; ++i) {
    for (size_t j = 0; j < buckets[i].size(); ++j) {
        arr[index++] = buckets[i][j]; // 将数据从桶中取出并放入原数组
    }
}

}

int main() {
float arr[] = {0.42, 0.32, 0.33, 0.52, 0.37, 0.47, 0.51};
int n = sizeof(arr) / sizeof(arr[0]);

bucketSort(arr, n);

// 打印排序后的数组
std::cout << "Sorted array: ";
for (int i = 0; i < n; ++i) {
    std::cout << arr[i] << " ";
}
std::cout << std::endl;

return 0;

}

posted @ 2024-10-10 19:43  Look_Back  阅读(5)  评论(0编辑  收藏  举报