#include <iostream>
#include <vector>
#include <algorithm>
// Bucket Sort in C++
std::vector<double> bucketSort(std::vector<double>& array) {
int n = array.size();
std::vector<std::vector<double>> bucket(n);
// Insert elements into their respective buckets
for (int i = 0; i < n; ++i) {
int index_b = static_cast<int>(n * array[i]);
if (index_b >= n) {
index_b = n - 1;
}
bucket[index_b].push_back(array[i]);
}
// Sort the elements of each bucket
for (int i = 0; i < n; ++i) {
std::sort(bucket[i].begin(), bucket[i].end());
}
// Get the sorted elements
int k = 0;
for (int i = 0; i < n; ++i) {
for (size_t j = 0; j < bucket[i].size(); ++j) {
array[k++] = bucket[i][j];
}
}
return array;
}
int main() {
std::vector<double> array = {0.42, 0.32, 0.33, 0.52, 0.37, 0.47, 0.51};
std::cout << "Sorted Array is\n";
std::vector<double> sortedArray = bucketSort(array);
for (double val : sortedArray) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKLy8gQnVja2V0IFNvcnQgaW4gQysrCnN0ZDo6dmVjdG9yPGRvdWJsZT4gYnVja2V0U29ydChzdGQ6OnZlY3Rvcjxkb3VibGU+JiBhcnJheSkgewogICAgaW50IG4gPSBhcnJheS5zaXplKCk7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rvcjxkb3VibGU+PiBidWNrZXQobik7CgogICAgLy8gSW5zZXJ0IGVsZW1lbnRzIGludG8gdGhlaXIgcmVzcGVjdGl2ZSBidWNrZXRzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGludCBpbmRleF9iID0gc3RhdGljX2Nhc3Q8aW50PihuICogYXJyYXlbaV0pOwogICAgICAgIGlmIChpbmRleF9iID49IG4pIHsKICAgICAgICAgICAgaW5kZXhfYiA9IG4gLSAxOwogICAgICAgIH0KICAgICAgICBidWNrZXRbaW5kZXhfYl0ucHVzaF9iYWNrKGFycmF5W2ldKTsKICAgIH0KCiAgICAvLyBTb3J0IHRoZSBlbGVtZW50cyBvZiBlYWNoIGJ1Y2tldAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBzdGQ6OnNvcnQoYnVja2V0W2ldLmJlZ2luKCksIGJ1Y2tldFtpXS5lbmQoKSk7CiAgICB9CgogICAgLy8gR2V0IHRoZSBzb3J0ZWQgZWxlbWVudHMKICAgIGludCBrID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBidWNrZXRbaV0uc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgYXJyYXlbaysrXSA9IGJ1Y2tldFtpXVtqXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYXJyYXk7Cn0KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBhcnJheSA9IHswLjQyLCAwLjMyLCAwLjMzLCAwLjUyLCAwLjM3LCAwLjQ3LCAwLjUxfTsKICAgIHN0ZDo6Y291dCA8PCAiU29ydGVkIEFycmF5IGlzXG4iOwogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBzb3J0ZWRBcnJheSA9IGJ1Y2tldFNvcnQoYXJyYXkpOwogICAgCiAgICBmb3IgKGRvdWJsZSB2YWwgOiBzb3J0ZWRBcnJheSkgewogICAgICAgIHN0ZDo6Y291dCA8PCB2YWwgPDwgIiAiOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=