基排序随机生成n个数据,C++实现
时间: 2024-05-11 10:13:58 浏览: 93
以下是基数排序的C代码实现,同时包含了随机生成n个数据的函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 10000 // 随机数的范围
#define MAX_DIGIT 4 // 最大位数
// 获取num的第exp位数字
int getDigit(int num, int exp) {
return (num / exp) % 10;
}
// 基数排序
void radixSort(int arr[], int n) {
int exp = 1; // 位数
int maxVal = arr[0]; // 数组中的最大值
int i, j, k;
// 获取数组中的最大值
for (i = 1; i < n; i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
// 从最低位到最高位循环排序
while (maxVal / exp > 0) {
int bucket[10][n]; // 桶
int bucketCnt[10] = {0}; // 每个桶中元素的个数
// 将元素放入桶中
for (i = 0; i < n; i++) {
int digit = getDigit(arr[i], exp);
bucket[digit][bucketCnt[digit]++] = arr[i];
}
// 将桶中元素按顺序放回数组
k = 0;
for (i = 0; i < 10; i++) {
for (j = 0; j < bucketCnt[i]; j++) {
arr[k++] = bucket[i][j];
}
}
exp *= 10; // 处理下一位
}
}
// 随机生成n个数据
void generateRandomData(int arr[], int n) {
int i;
srand(time(NULL)); // 设置随机数种子
for (i = 0; i < n; i++) {
arr[i] = rand() % MAX_NUM;
}
}
// 输出数组
void printArray(int arr[], int n) {
int i;
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int n = 10; // 数据个数
int arr[n]; // 存储数据的数组
// 随机生成数据
generateRandomData(arr, n);
printf("Original data:\n");
printArray(arr, n);
// 基数排序
radixSort(arr, n);
printf("Sorted data:\n");
printArray(arr, n);
return 0;
}
```
阅读全文