用c语言实现基数排序的核心代码
时间: 2023-12-25 11:23:02 浏览: 75
以下是基数排序的核心代码,使用了C语言实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getMax(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
void countSort(int arr[], int n, int exp) {
int output[n];
int count[10] = {0};
for (int i = 0; i < n; i++) {
count[(arr[i]/exp)%10]++;
}
for (int i = 1; i < 10; i++) {
count[i] += count[i-1];
}
for (int i = n-1; i >= 0; i--) {
output[count[(arr[i]/exp)%10]-1] = arr[i];
count[(arr[i]/exp)%10]--;
}
for (int i = 0; i < n; i++) {
arr[i] = output[i];
}
}
void radixSort(int arr[], int n) {
int max = getMax(arr, n);
for (int exp = 1; max/exp > 0; exp *= 10) {
countSort(arr, n, exp);
}
}
int main() {
int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};
int n = sizeof(arr)/sizeof(arr[0]);
radixSort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这是使用基数排序的C语言实现的核心代码。基数排序是一种非比较排序,可以用于对整数进行排序,其时间复杂度为O(d*(n+k)),其中d为数字的位数,k为进制数,n为数字的个数。
阅读全文