用C++按链式基数排序的方法实现对整数表的排序。
时间: 2024-03-01 12:52:07 浏览: 95
链式基数排序是一种高效的排序算法,可以用于对整数表进行排序。具体实现如下:
1. 定义一个链表节点结构体,包含一个指向下一个节点的指针和一个整数值。
```
struct Node {
Node* next;
int value;
};
```
2. 定义一个长度为10的指针数组,用于存储每个桶的头节点。
```
Node* buckets[10] = { nullptr };
```
3. 从低位到高位依次对整数表进行排序,每次排序都将整数按照当前位上的数字放入对应的桶中。
```
for (int i = 0; i < 32; i += 4) {
// 将整数按照当前位上的数字放入对应的桶中
for (int j = 0; j < n; j++) {
int digit = (arr[j] >> i) & 0xF;
Node* node = new Node{ nullptr, arr[j] };
if (buckets[digit] == nullptr) {
buckets[digit] = node;
} else {
node->next = buckets[digit];
buckets[digit] = node;
}
}
// 将桶中的元素依次取出,放回原数组中
int k = 0;
for (int j = 0; j < 10; j++) {
Node* node = buckets[j];
while (node != nullptr) {
arr[k++] = node->value;
Node* next = node->next;
delete node;
node = next;
}
buckets[j] = nullptr;
}
}
```
4. 最后得到的整数表就是排好序的。
完整的代码实现如下:
```
#include <iostream>
using namespace std;
struct Node {
Node* next;
int value;
};
void radix_sort(int arr[], int n) {
Node* buckets[10] = { nullptr };
for (int i = 0; i < 32; i += 4) {
for (int j = 0; j < n; j++) {
int digit = (arr[j] >> i) & 0xF;
Node* node = new Node{ nullptr, arr[j] };
if (buckets[digit] == nullptr) {
buckets[digit] = node;
} else {
node->next = buckets[digit];
buckets[digit] = node;
}
}
int k = 0;
for (int j = 0; j < 10; j++) {
Node* node = buckets[j];
while (node != nullptr) {
arr[k++] = node->value;
Node* next = node->next;
delete node;
node = next;
}
buckets[j] = nullptr;
}
}
}
int main() {
int arr[] = { 170, 45, 75, 90, 802, 24, 2, 66 };
int n = sizeof(arr) / sizeof(arr[0]);
radix_sort(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
阅读全文