数据结构与算法:桶排序的C++实现

任务:利用C++实现桶排序

代码如下:

#include <iostream>

#define NUM 10
#define RANGE 999

using namespace std;

void Print(int a[], int len);//打印数组信息

void BucketSort(int a[], int len);//桶排序排序算法(从小到大排序)

int main()
{
	int a[NUM] = { 3,28,19,789,3,5,0,12,156,7 };

	cout << "before sort: ";
	Print(a, NUM); 

	BucketSort(a, NUM);

	cout << "after sort: ";
	Print(a, NUM);

	while(1);
	return 0;
}


//打印数组信息
void Print(int a[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << a[i] << " ";
	}

	cout << endl;
}


// 桶排序排序算法(从小到大排序)
void BucketSort(int a[], int len)
{
	// 定义临时二维数组(桶)
	int b[10][NUM];

	// 定义储存余数的变量
	int Remainder;
	
	// 位数循环体(分别对个位,十位,百位……进行桶排序)
	for (int i = 1; i < RANGE; i *= 10)
	{
		// 将临时数组b中的所有元素初始化为 -1
		memset(b, -1, 10 * len * sizeof(int));
		
		// 获得第i位上的数字,并根据数字将元素依次放入合适的桶中
		for (int j = 0; j < len; j++)
		{
			Remainder = a[j] / i % 10;
			b[Remainder][j] = a[j];
		}

		// 将第i位的排序结果取出,更新待排序数组a
		int k = 0;
		for (int m = 0; m < 10; m++)
		{
			for (int n = 0; n < len; n++)
			{
				if (b[m][n] != -1)
				{
					a[k++] = b[m][n];
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44928892/article/details/109083533