/** * Clayton Cafiero * CS 2240 * 12-Jan-2021 */ #include #include #include template void printVector(const std::vector& v) { for (Comparable item : v) { std::cout << item << " "; } std::cout << std::endl; } void bucketSort(std::vector& v) { int maxNum = 0; for (int num : v) { if (num > maxNum) { maxNum = num; } } int numBuckets = v.size() + 1; // that's one approach std::vector> buckets(numBuckets); // Distribute values into buckets for (int i = 0; i < v.size(); ++i) { int j = std::floor((numBuckets - 1) * v[i] / maxNum); // notice that when v[i] = 0, this ^ will be 0, and // when v[i] = maxNum, this ^^ will be the index of the last bucket buckets[j].push_back(v[i]); int sizeOfThisBucket = buckets[j].size(); if (sizeOfThisBucket > 1) { // insertion sort as needed int value = v[i]; int k = sizeOfThisBucket - 2; while (k >= 0 && buckets[j][k] > value) { buckets[j][k + 1] = buckets[j][k]; // shift right --k; // move left } buckets[j][k + 1] = value; // insert } } // Collect values from buckets int i = 0; for (int j = 0; j < numBuckets; ++j) { for (int k = 0; k < buckets[j].size(); ++k) { v[i] = buckets[j][k]; ++i; } } } int main() { std::vector v = {234, 17, 901, 62, 3, 12, 620, 44, 115, 289, 28, 815, 71, 9, 84, 27, 99, 461, 388, 4, 712, 34, 672, 5}; printVector(v); bucketSort(v); printVector(v); }