基数排序

 

利用的就是计数排序的原理,复杂度也是O(n)

 

最初的数据

排好个位的数据

排好十位的数据

排好百位的数据

981

981

725

129

387

753

129

387

753

955

753

456

129

725

955

725

955

456

456

753

725

387

981

955

456

129

387

981

 

具体算法就忽略掉了,反正利用计数排序的思想,从最低位开始,

想像的程序和实际编出来的确实差很多,本以为利用计数排序很简单,应该一下子就ok了,但是还是遇到了问题,在此纪念一下,果然要编,编,编

#include <stdio.h>   
#include <stdlib.h>   
  
void countsort(int radix[],int ndata[],int newdata[],int begin,int end);  
void radixsort(int ndata[],int newdata[],int begin,int end);  
  
int main()  
{  
    int nData[8] = {124,125,137,180,323,333,120,233};    //创建10个数据,测试   
    int newdata[8];  
    radixsort(nData, newdata,0,7);        //调用插入排序   
  
    for (int i = 0; i < 8; ++i)          
    {  
        printf("%d ", newdata[i]);  
    }  
  
    printf("/n");  
    system("puase");  
  
    return 0;  
}  
  
void radixsort(int ndata[],int newdata[],int begin,int end)  
{  
    int radix[8];  
    int base=1;  
  
    for(int j=0;j<3;j++)  
    {  
        base*=10;  
        for (int i = 0; i <=end; ++i)  
        {  
            radix[i] = ndata[i] % base;  
            radix[i] /= base / 10;  
        }  
  
        countsort(radix,ndata,newdata,begin,end);  
    }  
  
}  
  
  
  
  
void countsort(int radix[],int ndata[],int newdata[],int begin,int end)  
{  
    int c[10];  
    for(int i=0;i<10;i++)  
        c[i]=0;  
    for(i=0;i<=end;i++)  
        c[radix[i]]++;  
    for(i=1;i<=9;i++)  
        c[i]=c[i]+c[i-1];  
    for(i=end;i>=0;i--)  
    {  
        newdata[c[radix[i]]-1]=ndata[i];  
        c[radix[i]]--;  
    }  
    for(i=0;i<=end;i++)  
        ndata[i]=newdata[i];  
}  


 

问题出在:第一次各位排序好后,十位进行排序,则把各位的给排乱了,

 

因为在radixsort中还是用ndata进行排序,这时应该用牌好的数据newdata进行,加完最后一句话,调试成功

 

且,应该最后能够自己判断是否到最高位了

 

可以设置一个flag标志,isok进行判断

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值