C++中利用队列实现链式基数排序,仅引入队列的库
时间: 2024-04-01 20:34:03 浏览: 64
在C++中,我们可以利用队列实现链式基数排序。这里介绍一个利用STL中的队列实现链式基数排序的方法。
```cpp
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
// 获取一个数字的某一位数字
int getDigit(int number, int digit) {
return (number / static_cast<int>(pow(10, digit - 1))) % 10;
}
// 链式基数排序
void radixSort(int arr[], int size, int digit) {
// 创建 10 个桶
queue<int> bucket[10];
// 按照每一位数字进行排序
for (int i = 1; i <= digit; i++) {
// 把数据放入桶中
for (int j = 0; j < size; j++) {
int num = getDigit(arr[j], i);
bucket[num].push(arr[j]);
}
// 把桶中的数据放回原数组中
int index = 0;
for (int j = 0; j < 10; j++) {
while (!bucket[j].empty()) {
arr[index++] = bucket[j].front();
bucket[j].pop();
}
}
}
}
int main() {
int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};
int size = sizeof(arr) / sizeof(arr[0]);
radixSort(arr, size, 3);
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
在代码中,我们首先定义了一个 `getDigit` 函数,用于获取一个数字的某一位数字。然后定义了 `radixSort` 函数,用于进行链式基数排序。在函数中,我们首先创建了 10 个桶,然后按照每一位数字进行排序,具体实现方法是把数据放入相应的桶中,然后把桶中的数据放回原数组中。最后,在 `main` 函数中,我们创建了一个数组 `arr`,并调用 `radixSort` 函数进行排序。最后输出排序后的结果。
需要注意的是,这里我们只引入了队列的库,而没有引入链表等其他库,因为队列是链表的一种特殊形式,可以用来实现链式存储。
阅读全文