基数排序

#include "stdafx.h"
#include <iostream>
#include <list>

using namespace std;
int maxdigit(int data[], int n);//判断最大的数有多少位
void radixsort(int data[], int n);

int main()

{
int data[10] = { 179,206,306,93,859,984,55,9,271,33 };
radixsort(data, 10);


cout << "排序后" << endl;
for (int i = 0; i < 10; i++)
cout << data[i] << " ";
cout << endl;

cout << "hello" << endl;
system("pause");
    return 0;
}
int maxdigit(int data[], int n)
{
int d = 1;
int p = 10;
for (int i = 0; i < n; i++)
{
while (data[i] >= p)//比10大加一位
{
p *= 10;
++d;
}
}
return d;
}

void radixsort(int data[], int n)
{
int digits = maxdigit(data,n);
list<int>lists[10];//定义链表
int d, j, k, factor;
for (d = 1, factor=1; d <= digits; factor*=10,d++)
{
for (j = 0; j < n; j++)
{
lists[(data[j] / factor) % 10].push_back(data[j]);
//%取模去除高位,提出数每一个数的个十百千位
}
for (j = k = 0; j < 10; j++)
{
while (!lists[j].empty())
{
data[k++] = lists[j].front();
lists[j].pop_front();
//从链表的头取一个删一个
}
}
//查看基数排序的中间结果
/* for (int m = 0; m < n; m++)
cout << data[m] << " ";
cout << endl;*/
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值