任务:利用C++实现桶排序
代码如下:
#include <iostream>#define NUM 10
#define RANGE 999using 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中的所有元素初始化为 -1memset(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位的排序结果取出,更新待排序数组aint 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];}}}}
}