#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM 80000
#define RANGE 80000
void radix_sort(int* arr, int l, int n) {
#define K 65536
int* cnt = (int*)malloc(sizeof(int) * K);
int* temp = (int*)malloc(sizeof(int) * (n - l));
memset(cnt, 0, sizeof(int) * K);
for (int i = l; i < n; i++) cnt[arr[i] % K] += 1;
for (int i = 1; i < K; i++) cnt[i] += cnt[i - 1];
for (int i = n - 1; i >= l; i--) temp[--cnt[arr[i] % K]] = arr[i];
memcpy(arr + l, temp, sizeof(int) * (n - l));
memset(cnt, 0, sizeof(int) * K);
for (int i = l; i < n; i++) cnt[arr[i] / K] += 1;
for (int i = 1; i < K; i++) cnt[i] += cnt[i - 1];
for (int i = n - 1; i >= l; i--) temp[--cnt[arr[i] / K]] = arr[i];
memcpy(arr + l, temp, sizeof(int) * (n - l));
free(cnt);
free(temp);
return;
}
int main() {
int arr[NUM] = { 0 };
srand(time(0));
for (int i = 0; i < NUM; i++) {
arr[i] = rand() % RANGE;
}
radix_sort(arr, 0, NUM);
for (int i = 0; i < NUM; i++) {
printf("%d ", arr[i]);
}
return 0;
}
基数排序(C语言)
于 2023-09-10 11:42:18 首次发布