用c++写基数排序的代码
时间: 2023-01-15 17:24:26 浏览: 143
C++写基数排序算法
下面是用 C 语言写的基数排序的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BASE 10
// 获取数字 num 的第 k 位数字
int get_digit(int num, int k) {
for (int i = 1; i < k; i++) {
num /= BASE;
}
return num % BASE;
}
// 对数组 arr 进行基数排序
void radix_sort(int *arr, int size) {
// 最大位数
int max_digits = 0;
for (int i = 0; i < size; i++) {
int digits = 0;
int num = arr[i];
while (num > 0) {
digits++;
num /= BASE;
}
if (digits > max_digits) {
max_digits = digits;
}
}
// 从低位到高位进行排序
for (int k = 1; k <= max_digits; k++) {
// 创建桶
int *bucket = (int *)calloc(BASE, sizeof(int));
// 计算每个数字在第 k 位出现的次数
for (int i = 0; i < size; i++) {
bucket[get_digit(arr[i], k)]++;
}
// 将桶内的数字依次放回原数组
for (int i = 1; i < BASE; i++) {
bucket[i] += bucket[i - 1];
}
int *sorted = (int *)malloc(size * sizeof(int));
for (int i = size - 1; i >= 0; i--) {
int digit = get_digit(arr[i], k);
sorted[--bucket[digit]] = arr[i];
}
memcpy(arr, sorted, size * sizeof(int));
free(sorted);
free(bucket);
}
}
int main() {
int arr[] = {329, 457, 657, 839, 436, 720, 355};
int size = sizeof(arr) / sizeof(arr[0]);
radix_sort(arr, size);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
基数排序是一种非比较型排序算法,它通过将数
阅读全文