zoukankan      html  css  js  c++  java
  • 3、桶排序

    1、思路:

      ①、首先找到数组中的最大值,然后新建一个初始值为 0 的数组 bucket, 此数组的长度是数组最大值+1,新建的这个数组中的下标值存放的元素就是原数组的数据值。

      ②、找到最大值后,开始遍历原数组,把原数组的数据加入bucket的下表中,bucket[i],每当有1个i bucket[i]的值就加一, 然后已经装入桶后,
       
      ③、遍历桶,如果bucket[j]位置不是 0 就说明此下标有数据,也就是说,此下标在原数组里有这个值, 然后排序 就是从大到小了 arr[i++]=j;

    2、优化
       创建 bucket 数组的大小为 (max - min) 即可。
     

    3、 时间复杂度:O(N)

      额外空间复杂度:O(N)
      是否可实现稳定性:否

     4、运用实例: 

       Leetcode 164. Maximum Gap

      假设数组 nums 有N个元素min到max。

      那么每个桶的最大差值不会小于ceiling[(max - min) / (N - 1)]

      令最大差值就是 ceiling[(B - A) / (N - 1)]

      去除 nums 的 max、val 值后 nums 剩下 N - 2 个元素

      将他们放在 N - 1个桶中,且第 k 个桶存放的数值大小为 [min+ (k-1)gap, min+ k*gap).

       

    5、基数排序:

        动画演示:https://www.cs.usfca.edu/~galles/visualization/RadixSort.html

        运用: https://www.cnblogs.com/skillking/p/9789980.html

  • 相关阅读:
    docker知识集锦
    kubernetes知识集锦
    redis知识集锦
    Java多线程知识集锦
    vscode离线安装插件
    jsoncpp的简易教程
    为什么要自动化测试?
    如何选择正确的自动化测试工具
    如何选择测试自动化工具?
    测试自动化的五大挑战
  • 原文地址:https://www.cnblogs.com/skillking/p/9788052.html
Copyright © 2011-2022 走看看