常用算法-桶排序

桶排序:

时间复杂度:O(N+N(log2N-log2M)),N个待排序,M个桶,M=N O(N)
空间复杂度:O(N+M)
原理:

将待排序的序列按照规则分组,每一组采用快速排序、插入排序的方式进行排序,然后按照次序将所有元素合并,得到一个有序的序列。关键在于构造基准值,放入对应的桶中
核心代码:
void bucketSort()
{
int size = count;
int bucketSize = 1;
while(size)
{
size /= 100;
bucketSize *= 10;
}
//构造桶的个数
bucketSize /= 10;
//最大值与最小值分组之间的数值
//取出列中最大值最小值
int max = list[0];
int min = list[0];
for (int i = 1;i < count;i++) {
max = qMax(max,list[i]);
min = qMin(min,list[i]);
}
int base = (max - min)/bucketSize + 1;
//元素放入对应桶中
QVector bucket[bucketSize];
for (int n = 0;n < count;n++) {
int index = (list[n] - min)/base;
bucket[index].push_back(list[n]);
}
//对桶内数据进行快速排序或者插入排序
for (int k = 0;k < bucketSize;k++) {
if(bucket[k].size() > 1)
{
quickSort(bucket[k],0,bucket[k].size()-1);
}
}
//有序取数据
int m = 0;
for (int q = 0;q < bucketSize;q++)
for (int p = 0;p < bucket[q].size();p++)
list[m++] = bucket[q][p];

相关推荐

  1. 算法-排序

    2023-12-25 05:34:02       52 阅读
  2. 排序算法-排序

    2023-12-25 05:34:02       40 阅读
  3. 前端排序算法

    2023-12-25 05:34:02       26 阅读
  4. 排序算法汇总

    2023-12-25 05:34:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-25 05:34:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-25 05:34:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-25 05:34:02       82 阅读
  4. Python语言-面向对象

    2023-12-25 05:34:02       91 阅读

热门阅读

  1. git使用

    git使用

    2023-12-25 05:34:02      61 阅读
  2. vue和react的区别是什么

    2023-12-25 05:34:02       62 阅读
  3. 给qemu虚机更换(Windows PE)光盘

    2023-12-25 05:34:02       46 阅读
  4. 建造者模式(Builder)

    2023-12-25 05:34:02       59 阅读
  5. 7-3 求完数

    2023-12-25 05:34:02       63 阅读
  6. Datawhale聪明办法学Python(竞赛题解版)

    2023-12-25 05:34:02       63 阅读
  7. C语言—每日选择题—Day63

    2023-12-25 05:34:02       43 阅读
  8. UDP Ping程序实现--第1关:Ping服务端创建UDP套接字

    2023-12-25 05:34:02       62 阅读