基数排序:首先分配10个桶,桶的编号为零到九。按照最低位的有效数字插入到相应的桶中。然后按照次低位插入到相应的桶中。//基数排序 #include<iostream> #include<vector> #include<random> using namespace std; void radixSort(vector<int> &arr) { //判断当前数组是否为空 if (arr.empty()) return; //找到数组中最大的元素 int max_value = arr[0]; for (int i = 1; i < arr.size(); ++i) { if (arr[i] > max_value) max_value = arr[i]; } //当前处理的标记 bool flag = true; int index = 1;//当前处理的位数 vector<vector<int>> tmp; while (flag) { //按位插入到相应的桶中 tmp.resize(10); for (int i = 0; i < arr.size(); ++i) { tmp[(arr[i] / index) % 10].push_back(arr[i]); } //重新出桶 int k = 0; for (int i = 0; i < tmp.size(); ++i) { for (int j = 0; j < tmp[i].size(); ++j) { arr[k++] = tmp[i][j]; } } index *= 10; if (index > max_value) flag = false; tmp.clear(); } } int main(void) { vector<int> arr = { 1, 2, 3, 45, 23, 67, 12322, 23 }; radixSort(arr); auto it = arr.begin(); while (it != arr.end()) { cout << *it++ << " "; } cout << endl; system("pause"); return 0; }
基数排序
最新推荐文章于 2022-11-16 10:38:24 发布