LSD:低位优先的字符串排序,核心思想就是对字符串的每个字符做一次键索引排序
#include <iostream>
#include <utility>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char** argv) {
vector<string> to_sort_strings = {"456346", "123456", "045351", "283109", "987102", "102931"};
cout << "Before sorting:\n";
for (auto& i : to_sort_strings) {
cout << i << "\n";
}
//LSD:对字符串的每一个字符做一次键索引排序
int wide = to_sort_strings[0].size();
for (int i = 0; i < wide; i++) {
int* count = new int[11];
for (int n = 0; n < 10; n++) {
count[n] = 0;
}
for (auto& str : to_sort_strings) {
auto cur_index = wide - i - 1;
count[str[cur_index] - '0' + 1]++;
}
for (int index = 1; index < 10; index++) {
count[index] += count[index - 1];
}
vector<string> aux;
aux.resize(to_sort_strings.size());
for (auto& str : to_sort_strings) {
auto cur_index = wide - i - 1;
aux[count[str[cur_index] - '0']++] = str;
}
to_sort_strings = aux;
delete[] count;
}
cout << "Result :\n";
for (auto& i : to_sort_strings) {
cout << i << "\n";
}
}