当前位置: 代码迷 >> 综合 >> 数据结构与算法:桶排序的C++实现
  详细解决方案

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

热度:88   发布时间:2024-02-28 14:05:25.0

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