桶式排序法的C++实现

桶式排序
桶式排序适用于那些数组中的元素为有界的情况,比如说以下算法中元素的界限为0~max
桶式排序是通过一个计数器数组来存储待排序数组中每个元素值的个数,然后通过累加计数器中的值,分别得出每种元素值的最末位置
最后通过元素的位置将元素放到数组中即可,从后往前放是为了保持算法的稳定性
桶式排序的时间代价为O(max+n),空间代价为O(max)
#ifndef BUCKETSORT_H
#define BUCKERSORT_H
#include <iostream>
template<typename T>
class BucketSort{
public:
	void bucketSort( T *,int,int  );
	void printArr( T *,int );
};
/**
*	桶式排序法
*/
template<typename T> void BucketSort<T>::bucketSort( T *sortedArr,int arrLength,int max )
{
	int *count=new int[max+1];
	T *temp=new T[arrLength];
	for( int i=0;i<max+1;++i )
		count[i]=0;
	/**
	*	对相同的值计数
	*/
	for( int i=0;i<arrLength;++i )
	{
		++count[ sortedArr[i] ];
		temp[i]=sortedArr[i];
	}
	/**
	*	求出累加和
	*/
	for( int i=1;i<max+1;++i )
		count[i]+=count[i-1];
	/**
	*	此处--count[ temp[i] ]不仅仅求出了temp[i]应该存放的位置,而且对象的计数值减了1,使得求出了temp[i]应该在的位置
	*	此处从arrLength-1开始是为了稳定性
	*/
	for( int i=arrLength-1;i>=0;--i )
		sortedArr[ --count[ temp[i] ] ]=temp[i];
	delete [] count;
	delete [] temp;
}
template<typename T> void BucketSort<T>::printArr( T *sortedArr,int arrLength )
{
	for( int i=0;i<arrLength;++i )
	{
		std::cout<<sortedArr[i]<<" ";
	}
}
#endif
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值