您的位置:首页 > 编程语言 > C语言/C++

C语言实现基数排序——针对数字的实现方法

2011-10-08 22:31 489 查看
#define LENGTH 7

#include <math.h>

void RadixSort(int ArrayToSort[], int digit)
{
int p,n,m,i,k;

//low to high digit
for( k = 1; k <= digit; k++)
{
//temp array to store the sort result inside digit
int tmpArray[LENGTH] ={0};

//temp array for countingsort
int tmpCountingSortArray[] = {0,0,0,0,0,0,0,0,0,0};

//CountingSort
for( i = 0; i < LENGTH; i++)
{
//split the specified digit from the element
int tmpSplitDigit = ArrayToSort[i]/(int)pow(10,k-1) - (ArrayToSort[i]/(int)pow(10,k))*10;
tmpCountingSortArray[tmpSplitDigit] += 1;
}

for( m = 1; m < 10; m++)
{
tmpCountingSortArray[m] += tmpCountingSortArray[m - 1];
}

//output the value to result
for( n = LENGTH - 1; n >= 0; n--)
{
int tmpSplitDigit = ArrayToSort
/ (int)pow(10,k - 1) - (ArrayToSort
/(int)pow(10,k)) * 10;
tmpArray[tmpCountingSortArray[tmpSplitDigit]-1] = ArrayToSort
;
tmpCountingSortArray[tmpSplitDigit] -= 1;
}

//copy the digit-inside sort result to source array
for( p = 0; p < LENGTH; p++)
{
ArrayToSort[p] = tmpArray[p];
}
}

for(i = 0; i < LENGTH; i++)
printf("%d ",ArrayToSort[i]);

printf("\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: