桶排序的思想就是如果有一个大小为Size的数组A,数组的值范围为(0 - Max)
这样我们可以创建一个大小为Max+1的数组B,每个元素都为0.
从头遍历A,当读取到A[i]的时候,B[A[i]]的值+1,这样所有的A数组被遍历后,直接扫描B之后,输出表B就可以了。
代码如下:
#include <iostream>
#include <array>
#define Max 8
using namespace std;
void BucketSort(array<int,Max> &A) {
int i, j, count = 0;
array<int, Max + 1> B{ 0 };
for (i = 0; i < Max; i++) {
B[A[i]]++;
}
for (i = 0; i < Max+1; i++) {
if (B[i] > 0) {
for (j = 0; j < B[i]; j++) {
A[count++] = i;
}
}
}
}
int main()
{
array<int,Max> myarray = { 1, 2, 2, 7, 4, 8, 3, 5 };
BucketSort(myarray);
for (int i = 0; i < Max; i++) {
cout << myarray[i] << ' ';
}
cout << endl;
system("pause");
return 0;
}