桶排序

得闲无聊想到了以后去工作去面试,由面试想到了面试题,想到了一些大数据排序的题目,又想到了桶排序

于是练练手,用C++写一下桶排序的大致的代码:

有些防手误的调试代码和注释,不影响阅读

#include <iostream>
using namespace std;
// Bucket Sorting


int a[]={1,255,8,6,25,47,14,35,58,75,96,158,657};
const int len = sizeof(a)/sizeof(int);

int bucket[10][len+1];	//用bucker[i][len]存放每行的个数

void initBucket();	
void showArray();
void showBucket();
void distribute(int digit);
void collect();
void bucketSort();

void bucketSort(){

	showArray();

	for(int i = 0,d = 1; i <3 ;d*=10,i++)
	{
		distribute(d);

		collect();	
		
		showBucket();
		showArray();
		initBucket();

	//	getchar();
	}

}

void initBucket(){	
	for(int i = 0; i <10; i++){
		bucket[i][len] = 0;
	}
}

void distribute(int digit){
	for(int i =0;i< len ;i++){
		int num = (a[i]%(10*digit)-a[i]%digit)/digit;
		bucket[num][bucket[num][len]++] = a[i];
	}
}

void collect(){
	int k= 0;

	for(int i =0;i<= 9;i++){
		for(int j = 0;j < bucket[i][len];j++)
		{
			a[k++] = bucket[i][j];
		}
	}
}



int main()	
{	
	bucketSort();

//	cout<<sizeof(a)/sizeof(int)<<'\n';	//数组个数
//	cout<<(123%100-123%10)/10;	//取十位
	getchar();
	return 0;
}


void showArray(){
	cout<<"------";
	for(int i =0;i<len;i++){
		cout<<a[i]<<' ';
	}
	cout<<'\n';
}

void showBucket(){
	for(int i =0;i<= 9;i++){
		for(int j = 0;j <= len;j++)
			cout<<bucket[i][j]<<(char *)(j>9?"  ":" ");
		cout<<'\n';
	}
}

  

 

桶排序是外部排序,时间复杂度为O(n)~,

可是空间占用比较大,上面十进制排序的例子中为10n,理论上来说,有10M的数据排序过程中就会占用100M的空间,如果用指针列表来作为桶存放数据,空间使用量为2n

另外,桶排序只适合用在特别的场合,例如用在数字的排序。

 

转载于:https://www.cnblogs.com/Kelvinshere/archive/2013/03/24/2978272.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值