任务:利用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];
}
}
}
}
}