#include<iostream>
#include<vector>
#include<string>
using namespace std;
int MaxBit(const vector<int> &arr)//获得最大位数
{
int len = 1;
int max = arr[0];
for (int i = 0; i < arr.size(); i++)
{
if (max < arr[i])
max = arr[i];
}
while (max /= 10)
len++;
return len;
}
void RadixSort(vector<int> &arr)
{
vector<vector<int>> tong(10);//创建一个二维向量,其中包含10个一维向量
int r = 1;
int len = MaxBit(arr);
vector<int> array;
for (int i = 0; i < len; i++)
{
for (int & s : arr)
{
int k = s / r;
int q = k % 10;
tong[q].push_back(std::move(s));
}
int index = 0;
for (auto & tong1 : tong)
{
for (int &s : tong1)
arr[index++] = std::move(s);
tong1.clear();
}
cout << "第" << i + 1 << "趟排序结果:";
for (auto x : arr)
cout << x << " ";
cout << endl;
r*=10;
}
}
int main()
{
vector<int> arr = { 278,109,63,930,589,184,505,269,8,83 };
RadixSort(arr);
cout << "基数排序的结果:";
for (auto x : arr)
cout << x << " ";
cout << endl;
system("pause");
return 0;
}
c++之基数排序
最新推荐文章于 2024-06-27 21:51:33 发布