排序算法——桶排序

桶排序是一种基于函数映射的排序算法,通过将数据均匀分布到多个桶中,然后对每个桶内的数据进行排序,最后按顺序拼接所有桶的数据。在均匀分布的情况下,桶排序能提供高效的排序性能。文章提供了具体的算法描述、步骤和示例代码,展示了如何在C++中实现桶排序,并找到了输入数组的最大值和最小值以确定桶的数量和数据分组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基数是什么?

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序。

2.描述

桶排序算法的原理如下:

  1. 设置一个定量的数组当作空桶。
  2. 遍历输入数据,并且把数据一个一个放到对应的桶里去。
  3. 对每个非空桶进行分别排序。
  4. 将各桶的数据拼接。

3.示例

// 桶排序
void bucketSort(int arrs[], int length, int bucketNum) {
  int **queues = new int *[bucketNum];
  int *count = new int[bucketNum];
  memset(count, 0x00, sizeof(int) * bucketNum);
  for (int i = 0; i < bucketNum; i++) {
    queues[i] = new int[length];
    memset(queues[i], 0x00, length * sizeof(int));
  }

  int max = arrs[0], min = arrs[0];  // 找到最大最小値
  for (int i = 1; i < length; i++) {
    if (arrs[i] > max) max = arrs[i];
    if (arrs[i] < min) min = arrs[i];
  }
  int index = 0;
  // 按照桶数量进行分组
  int seq = (max - min + 1) / bucketNum;
  for (int i = 0; i < length; i++) {
    index = (arrs[i] - min) / seq;  // 数据分组插入队列
    if (index == bucketNum) index--;
    queues[index][count[index]++] = arrs[i];
  }

  index = 0;
  for (int i = 0; i < bucketNum; i++) {
    insertionSort(queues[i], count[i]);
    for (int j = 0; i < count[j]; j++) arrs[index++] = queues[i][j];
  }

  for (int i = 0; i < bucketNum; i++) {
    delete[] queues[i];
  }
  if (queues != NULL) delete[] queues;
  if (count != NULL) delete[] count;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值