C++数据结构 15 基数排序

 

 

具体的原理可以参考这篇文章:

http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html

 

代码实现:

#include <iostream>
#include <list>
using namespace std;

int maxdixgit(int data[],int n)   //返回数有几位
{
    int d=1;                //基数的位数
    int p=10;               //开始设值为10,然后进行比较
    for(int i=0;i<n;++i)    //循环进行比较查看几位数
    {
       while(data[i]>=p)   //查看数是不是比10要大
       {
           p*=10;           //如果比10大,p的值*10
           ++d;            //d的位数加1
       }
    }
    return d;
}
void radixSort(int data[],int n)  //基数排序
{
  list<int> p[10];
  int s,j,i,x;
  int digit=maxdixgit(data,n);   //先返回数有几位
  for( i=0,x=1;i<digit;x*=10,++i)   //进行几次取出,排序
  {
      for( j=0;j<n;j++)  //遍历所有的数,将数放在链表中
      {
          //设一个数为n,则在C语言中其个位、十位、百位、千位依次这样计算:n/1%10,n/10%10,n/100%10,n/1000%10
          p[(data[j]/x)%10].push_back(data[j]);  //把数据放入链表中,x就是数取整的位
      }
      for( s=j=0;j<10;j++)  //将链表中的数取出来放入数组中
      {
          while(!p[j].empty()) //如果链表有数据
          {
             data[s++]=p[j].front();  //将数据放入数组中
             p[j].pop_front();   //删除链表中的数据
          }
      }
      for(int m=0;m<n;m++)      //查看中间结果
        cout<<data[m]<<' ';
      cout<<endl;
  }
}



int main()
{
    int a[10]={10,45,13,5,9,789,485,659,785,1023};
    radixSort(a,10);
    for(int i=0;i<10;i++)
    {
       cout<<a[i]<<' ';
    }
    cout<<endl;
    // cout << "Hello world!" << endl;
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值