基数排序——C++实现
template_head.h
#include <iostream>
#include <vector>
#include <string>
#include "../head_file/template_head.h"
using namespace std;
void radix_sort()
{
cout << "Radix Sort!!!" << endl;
int arr[] = { 73, 22, 93, 43, 55, 14, 28, 65, 39, 81, 100, 8, 7, 1889 };
int len = sizeof(arr) / sizeof(arr[0]);
cout << "length of arr: " << len << endl;
radixSort(arr, len);
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
void radixSort(int arr[], int length) {
if (length <= 1) return;
int max_item = arr[1];
for (int i = 1; i < length; i++) {
max_item = max_item > arr[i] ? max_item : arr[i];
}
int len = 1;
while (max_item /= 10)
{
len++;
}
vector<vector<int> > buckets(10);
int tmp = len;
while (tmp--)
{
for (int i = 0; i < length; i++) {
int tmp_item = arr[i];
int r;
for (int j = 0; j < len - tmp; j++) {
r = tmp_item % 10;
tmp_item /= 10;
}
buckets[r].push_back(std::move(arr[i]));
}
int idx = 0;
for (vector<int>& bucket : buckets) {
for (int& x : bucket) {
arr[idx++] = std::move(x);
}
bucket.clear();
}
}
}