带你读《图解算法小抄》十四、排序(18)

简介: 带你读《图解算法小抄》十四、排序(18)

带你读《图解算法小抄》十四、排序(17)https://developer.aliyun.com/article/1348133?groupCode=tech_library


3完整代码:

function bucketSort(arr, bucketSize = 5) {
  if (arr.length === 0) {
    return arr;
  }
  const minValue = Math.min(...arr);
  const maxValue = Math.max(...arr);
  const bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;
  const buckets = new Array(bucketCount);
  for (let i = 0; i < buckets.length; i++) {
    buckets[i] = [];
  }
  for (let i = 0; i < arr.length; i++) {
    const bucketIndex = Math.floor((arr[i] - minValue) / bucketSize);
    buckets[bucketIndex].push(arr[i]);
  }
  const sortedArray = [];
  for (let i = 0; i < buckets.length; i++) {
    if (buckets[i]) {
      insertionSort(buckets[i]);
      sortedArray.push(...buckets[i]);
    }
  }
  return sortedArray;
}

 在这个示例中,我们使用bucketSort函数实现桶排序。我们首先确定桶的数量,根据元素范围和分布计算出合适的桶的数量。然后,我们创建桶数组,并将待排序元素根据值分配到相应的桶中。接下来,对每个非空的桶进行排序,我们可以使用插入排序等算法。最后,将每个桶中的元素按照顺序合并,得到最终的排序结果。

4复杂度

桶排序的计算复杂度取决于用于对每个桶进行排序的算法、要使用的桶的数量以及输入是否均匀分布。

 

当桶内使用的排序算法是插入排序时,桶排序的最坏情况时间复杂度为 O(n^2)。这是最常见的情况,因为预期是每个桶的元素数量相对于整个列表不会太多。在最坏情况下,所有元素都被放入一个桶中,导致运行时间降低到插入排序的最坏情况复杂度(所有元素按逆序排列)。如果所使用的中间排序算法的最坏情况运行时间是 O(n * log(n)),那么桶排序的最坏情况运行时间也将是 O(n * log(n))

 

在平均情况下,当元素在桶之间的分布相对均匀时,可以证明桶排序的平均运行时间为 O(n + k),其中 k 是桶的数量。

5参考资料

维基百科上的桶排序

 

8.基数排序


在计算机科学中,基数排序(Radix Sort)是一种非比较的整数排序算法,它通过将具有相同有效位置和值的数字按位进行分组来排序具有整数键的数据。这需要使用位数制表示法,但由于整数可以表示字符串(例如,名称或日期)和特定格式的浮点数,因此基数排序不仅限于整数。

 

名称的由来

在数学的数字系统中,基数或底数是用于表示位置制数字系统中的数字的唯一数字的数量,包括数字零。例如,二进制系统(使用数字0和1)的基数为2,十进制系统(使用数字0到9)的基数为10。


带你读《图解算法小抄》十四、排序(19)https://developer.aliyun.com/article/1348131?groupCode=tech_library

相关文章
|
8月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
388 5
|
8月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
434 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
9月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
326 1
|
8月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
280 0
|
8月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
249 0
|
9月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
172 0
|
8月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
350 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
8月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
338 1
|
9月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
557 3
|
8月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
184 0

热门文章

最新文章