码迷,mamicode.com
首页 > 编程语言 > 详细

桶排序

时间:2017-04-20 10:34:41      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:element   线性时间   lan   就会   aik   .com   也会   sizeof   sort   

桶排序 (Bucket sort)将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。

桶排序最好情况下使用线性时间O(n),很显然桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为 其它部分的时间复杂度都为O(n);很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。但相应的空间消耗就会增大。

#include <iostream>
using namespace std;
int a[] = { 1, 255, 36, 32, 23, 16 };
const int len = sizeof(a) / sizeof(int);
int b[10][len + 1] = { 0 };
void bucketsort(int a[]);
void distributeelements(int a[], int b[10][len + 1], int digits);
void collectelements(int a[], int b[10][len + 1]);
int numofdigits(int a[]);
void zeroBucket(int b[10][len + 1]);
int main()
{
	cout << "原始数组:";
	for (int i = 0; i < len; i++)
	{
		cout << a[i]<<" ";
	}
	cout << endl;
	bucketsort(a);
	cout << "排序后数组:";
	for (int i = 0; i < len; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}
void bucketsort(int a[])
{
	int digits = numofdigits(a);
	//cout << digits << endl;
	for (int i = 1; i <= digits; i++)
	{ 
		distributeelements(a, b, i);
		collectelements(a, b);
		if (i != digits)
			zeroBucket(b);
	}
}
int numofdigits(int a[])
{
	int largest = 0;
	for (int i = 0; i < len; i++)
		if (a[i]>largest)
			largest = a[i];
		int digits = 0;
		while (largest)
		{
			digits++;
			largest /= 10;
		}
	
	return digits;
}
void distributeelements(int a[], int b[10][len + 1], int digits)
{
	int divisor = 10;
	for (int i = 1; i < digits; i++)
		divisor *= 10;
	for (int j = 0; j < len; j++)
	{
		int numofdigits = (a[j] % divisor - a[j] % (divisor / 10)) / (divisor / 10);
		int num = ++b[numofdigits][0];
		b[numofdigits][num] = a[j];
	}
}
void collectelements(int a[], int b[10][len + 1])
{
	int k = 0;
	for (int i = 0; i < 10; i++)
		for (int j = 1; j <= b[i][0]; j++)
			a[k++] = b[i][j];
}
void zeroBucket(int b[][len + 1])
{
	for (int i = 0; i < 10;i++)
	for (int j = 0; j < len + 1; j++)
		b[i][j] = 0;
}

  参考:百度百科(桶排序)

桶排序

标签:element   线性时间   lan   就会   aik   .com   也会   sizeof   sort   

原文地址:http://www.cnblogs.com/wujufengyun/p/6736947.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!