/*
* Get the spcific digit of given number.
* For example, number 234,
* the 0st digit is 4,
* the 1st digit is 3,
* the 2nd digit is 2,
* the 3th digit is 0.
*/
int GetNDigit(int nNumber, int nIdx)
{
for (int i = nIdx; i > 0; i--) {
nNumber /= 10;
}
return nNumber % 10;
}
/*
* Counting Sort the given array according to specific digit.
* array: 待排序数组.
* nLength: 待排序数组长度
* nIdxDigit: 排序要依据的位. 0为最低位,高位依次加1.
* nK: *nIdxDigit位上可能出现的最大数字(对10进制数排序则nK=9).
*/
void CountingSort_SpecificDigit(int array[], size_t nLength, int nIdxDigit, int nK=9)
{
if (NULL == array || 0 == nLength || 0 == nK)
return;
int *digitNum = new int[nLength];
memset(digitNum, 0, sizeof(int)*nLength);
int *count = new int[nK+1];
memset(count, 0, sizeof(int)*(nK+1));
int *arrayResult = new int[nLength];
memset(arrayResult, 0, sizeof(int)*nLength);
// 数组digitNum[],保存每个元素指定位上的数字
排序算法 - 基数排序(C++)
最新推荐文章于 2024-03-19 15:54:54 发布