基数排序

相当好的一个动画点击打开链接

看两遍就知道怎么做了。

思想是先根据每位数的个位排序,然后根据十位排序,然后百位,以此类推

就好像我们比较两个数大小,先看最高位,然后依次看低一位,例如321,311,如果出现一位不同,那么下面的位数就不用看了

3==3,然后2>1,个位的1==1不用看,所以322>311,那么排序自然相反(因为每一次排序都是建立在之前排序的基础上,

所以,后面排序的显然更为重要,这就和两个数比较的时候高位更重要联系起来,所以从低位到高位排序)

这里根据某一位排序时,用到的是计数排序的方法。。

 

mdzz自己随机了几组实例验证(a【i】只要大于100)都出错了,还以为哪里的问题,结果是(int)pow(10,i)掉精度,真是 ╯^╰ ,注:(int)pow(10,2)=99

 

void Bucket(int *a,int len,int base,int *c)
{
    int bkt[10]={0};
    for(int i=0;i=0;i--)
    {
        int t=(a[i]/base)%10;
        c[--bkt[t]]=a[i];
    }
    for(int i=0;i

 

洛谷p1177快速排序

 

/*author:revolIA*/
#include
using namespace std;
typedef long long ll;
const int maxn = 1e6+7,mod = 1e9+7;
int n,Max=-1e9;
int a[maxn],b[maxn],c[10];
void radixSort(int a[],int n,int base){
    memset(c,0,sizeof c);
    for(int i=0;i

 

然后 心血来潮写个二进制的、比较慢、

/*author:revolIA*/
#include
using namespace std;
typedef long long ll;
const int maxn = 1e5+7,mod = 1e9+7;
int n,Max=-1e9;
int a[maxn],b[maxn],c[2];
void radixSort(int a[],int n,int base){
    c[0] = c[1] = 0;
    for(int i=0;i>base)&1)]++;
    c[1] += c[0];
    for(int i=n-1;~i;i--)b[--c[((a[i]>>base)&1)]] = a[i];
    for(int i=0;i>= 1,cnt++;
    for(int i=0;i

 

 

 

你可能感兴趣的:(杂谈(好吧,单纯就是个杂谈))