常用排序算法的实现(C语言版)-基数排序

基数排序:

#include <stdlib.h>
#include "algosort.h"
/*被排序元素的最大位数,4则意味着只能排序< 10000 的数*/
#define WIDTH 4
#define MAXK 10 //位数划分基于的基数,10表示为10进制划分

void radixSort(int a[], int n) {
int i;
void innerCountingSort(int a[], int n, int d);
for (i = 0; i < WIDTH; i++) {
innerCountingSort(a, n, i);
}
}

void innerCountingSort(int a[], int n, int d) {
int i, j, x, k[MAXK] = {0};
int *ip = (int *)malloc(n * sizeof(int));
int *bp = (int *)malloc(n * sizeof(int));
int getDValue(int value, int d);
for (i = 0; i < n; i++) {
ip[i] = getDValue(a[i], d);
k[ip[i]]++;
}

for (j = 1; j < MAXK; j++) {
k[j] = k[j] + k[j-1];
}

for (i = n - 1; i >= 0; i--) {
bp[k[ip[i]] - 1] = a[i];
k[ip[i]]--;
}

for (i = 0; i < n; i++) {
a[i] = bp[i];
}

free(ip);
free(bp);
}

/*
*获取一个数第d位数的值,位数索引从0开始
*/
int getDValue(int value, int d) {
for (;d > 0 && value > 0; d--) {
value = value / MAXK;
}
return value % MAXK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值