/** * 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; } /** * Radix sort * Note: Not a templated function * This assumes a vector of non-negative integers */ void radixSort(std::vector& v, int numDigits) { std::vector> buckets(10); for (int iteration = 0; iteration < numDigits; ++iteration) { // Copy items from vector into the appropriate buckets for (int i = 0; i < v.size(); ++i) { int digit = (v[i] / int(std::pow(10, iteration)) % 10); buckets[digit].push_back(v[i]); } // Copy everything from buckets back into vector in the appropriate order int i = 0; for (int bucket = 0; bucket < buckets.size(); ++bucket) { for (int item = 0; item < buckets[bucket].size(); ++item) { v[i] = buckets[bucket][item]; ++i; } buckets[bucket].clear(); } printVector(v); } } /** * Assumes a vector of integers >= 0 */ void radixSort(std::vector& v) { int maxNum = 0; for (int num : v) { if (num > maxNum) { maxNum = num; } } int numDigits = int (std::log10(maxNum) + 1); radixSort(v, numDigits); } int main() { std::vector v = {234, 17, 901, 62, 3, 12, 620, 44, 115, 289, 28, 815, 71, 9, 84}; printVector(v); radixSort(v); printVector(v); }