| « | June 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
|
[原码系列]九钟排序原码(七)基数排序 |
|
int CSortDlg::digit(int data,int n)
{
int i = -1;
for (int k = 0; k <= n;++k)
{
i = data % RADIX;
data = data / RADIX;
}
return i;
}
void CSortDlg::SortOnDigit(int* data,int d,int left,int right)
{
int c[RADIX] = {0}; //c[i]记录d位上为i的元素个数
for (int i = left; i <= right ;i++ )
{
++c[digit(data[i],d)]; //记录d位上相同的数据个数
}
for (int j = 1;j < RADIX ;++j )
{
c[j] += c[j-1]; //很明显,d位上较大(就是j的值),元素越大
//c[j]记录d位上小于等于j的元素的个数
}
int len = right - left +1;
int* tmp = new int[len];
//知道了有多少元素在d位置上比自己小,则可以确定d位上的值的元素位置
for (int k = right; k >= left; k--)
{
tmp[--c[digit(data[k],d)]] = data[k];
}
for (int m = left;m <= right ;++m )
{
data[m] = tmp[m - left];
}
delete[] tmp;
}
void CSortDlg::RadixSort(int* data,int left,int right)
{
for (int i = 0;i < WIDTH; ++i)
{
SortOnDigit(data,i,left,right);
}
} | |
|
|
| 回复:九钟排序原码(七)基数排序 |
勿忘静晴发表评论于2008/4/17 19:24:03 |
|
|
|
| 回复:九钟排序原码(七)基数排序 |
勿忘静晴发表评论于2008/4/17 19:23:19 |
|
|
|
» 1 »
|
|
| 公告 |
人在上海不断的学技术,学生活,再苦再累也要坚持! |
| 统计 |
blog名称: 日志总数:20 评论数量:37 留言数量:0 访问次数:81286 建立时间:2006年7月5日 | |