基点算法

基点算法的思想,是将相关联的数据,拆成某种特定的单元,然后对单元排序。
算法的核心点在于两个:拆和单元排序。
拆成何种结构,这个需要特定场景,但是拆出来后一定能单元排序
单元排序则是实际排序的算法,差异比较大。

本例中处理的是三位数的排序,故拆成3个个位数就好,单元排序采用的是计数排序

#include<iostream>

int getDigit(int A, int index)//获取A在index位置的数字,由低位到高位
{
    int temp = pow(10, index);
    temp = A / temp;
    return temp % 10;
}

void ArraySort(int *A, int count, int index)//按照第index位排序,这里用的是计数算法
{
    int *C = new int[10];
    int *B = new int[count];
    memset(C, 0, sizeof(int) * 10);
    for (int i = 0; i < count; i++)
    {
        C[getDigit(A[i], index)] ++;
    }
    for (int i = 1; i < 10; i++)
    {
        C[i] += C[i - 1];
    }
    for (int i = count - 1; i >= 0; i--)
    {
        B[C[getDigit(A[i], index)] - 1] = A[i];
        C[getDigit(A[i], index)] = C[getDigit(A[i], index)] - 1;
    }
    for (int i = 0; i < count; i++)
    {
        A[i] = B[i];
    }
    delete[] B;
    delete[] C;
}

void RadixSort(int *A, int count, int d)
{
    for (int i = 0; i < d; i++)
    {
        ArraySort(A, count, i);
    }
}

int main()
{
    int A[7] = { 329, 457, 657, 839, 436, 720, 355 };
    RadixSort(A, 7, 3);
    int b = 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值