|
|
|
@ -0,0 +1,37 @@
|
|
|
|
|
/*--------------------基数排序---------------------*/
|
|
|
|
|
//该函数的作用是找出num的pos位数的数字(比如:23的个位数数字是3)
|
|
|
|
|
int getNumPos(int num, int pos) {
|
|
|
|
|
int i;
|
|
|
|
|
int temp = 1;
|
|
|
|
|
for(i=0;i<pos-1;i++) {
|
|
|
|
|
temp *= 10;
|
|
|
|
|
}
|
|
|
|
|
return (num / temp) % 10;
|
|
|
|
|
}
|
|
|
|
|
void radixSort(int data[], int n) {
|
|
|
|
|
int i,j,k,pos,num,index;
|
|
|
|
|
//这几句话是创建一个从0-9(行)× (n+1)(列)的网格,第一列从上往下是0-9,
|
|
|
|
|
//第二列是该行包含的元素个数,默认为0个
|
|
|
|
|
int *radixArrays[10];
|
|
|
|
|
for(i=0;i<10;i++) {
|
|
|
|
|
radixArrays[i] = (int *)malloc(sizeof(int) * (n+1));
|
|
|
|
|
radixArrays[i][0] = 0;
|
|
|
|
|
}
|
|
|
|
|
//pos最大为31为数,计算机能承受的最大范围了
|
|
|
|
|
for(pos=1;pos<=31;pos++) {
|
|
|
|
|
//该for循环是将数组的元素按照位数(pos)的值放进网格内
|
|
|
|
|
for(i=0;i<n;i++) {
|
|
|
|
|
num = getNumPos(data[i], pos);
|
|
|
|
|
index = ++radixArrays[num][0];
|
|
|
|
|
radixArrays[num][index] = data[i];
|
|
|
|
|
}
|
|
|
|
|
//该for循环是将上面的for循环已经按照某个位数(pos)排列好的元素存入数组
|
|
|
|
|
for(i=0,j=0;i<10;i++) {
|
|
|
|
|
for(k=1;k<=radixArrays[i][0];k++) {
|
|
|
|
|
data[j++] = radixArrays[i][k];
|
|
|
|
|
}
|
|
|
|
|
//清空网格,以便给下个位数排列
|
|
|
|
|
radixArrays[i][0] = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|