基数排序

接下来是代码的实现:

/*
*  基数排序基本思想:
*      基数排序又名桶排序。是一种关键字为整型时非常高效的排序方法。
*      步骤:
*      (1):明确数据时什么进制(Scale)的整数。 若是 10进制,则分10个
*    桶,桶的编号是0、1、2、......、9。若是8进制,则分8个桶,桶的编号是
*    0、1、2、......、7。
*       (2):然后就是规则:数据从低位到高位(个位到百位(数据是三位数))
*       (3):要求进出桶的数据元素序列满足先进先出的原则。所以这里用到队列
*/    

#include <iostream>
#include <queue>//用到了 STL中“队列”
#include <iomanip>
using namespace std;

typedef int DataType; //数据类型
#define Size     20   //数组大小
#define digitNum 3    //数据元素中最大数值的位数
#define scale    10   //数值的进制 10进制

void PaintArray(DataType Array[], int lengthOfArray);//输出数组
void RaidxSort(DataType Array[]/*数组*/, int lengthOfArray/*数组长度*/,
			   int X_digitNum/*位数*/, int Scale/*进制*/);//基数排序

int main(void)
{
	DataType Array[Size] = {
		23,  45,  67,  43,  65,
		123, 543, 341, 787, 742,
		4,   3,   54,  32,  45,
		56,  62,  233, 456, 34};
	PaintArray(Array, Size);
	RaidxSort(Array, Size, digitNum, scale);
	PaintArray(Array, Size);
	return 0;
}
void PaintArray(DataType Array[], int lengthOfArray)
{
	for(int i = 0; i < lengthOfArray; i++)
		cout<<Array[i]<<" ";
	cout<<endl;
}
void RaidxSort(DataType Array[]/*数组*/, int lengthOfArray/*数组长度*/,
			   int X_digitNum/*位数*/, int Scale/*进制*/)
{
	queue<DataType>* bucket = new queue<DataType>[Scale];
	int power = 1;//这就是那个公式的应用
	for(int  i = 0; i < X_digitNum; i++)
	{
		if(i == 0) power = 1;
		else
			power = power * Scale;
		//将数据分配到桶里
		for(int j = 0; j < lengthOfArray; j++)
		{
			int k = Array[j]/power - Array[j]/(power*Scale) * Scale;
			bucket[k].push(Array[j]);
		}
		//将数据顺序(FIFO)从桶中取出
		int count = 0;
		for(int i = 0; i < Scale; i++)
			while(!bucket[i].empty())
				Array[count] = bucket[i].front(),bucket[i].pop(),count++;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值