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

  • 相关阅读:
    VKD224B触摸芯片调试笔记
    liunx 常用命令学习笔记
    2440 裸机学习 点亮LED
    单端正激变换器
    c# 文件与流
    c# 接口笔记
    Ubuntu18.04 server安装步骤
    how to force git to overwritten local files
    Linux基础
    解决Linux下Firefox无法启动的问题
  • 原文地址:https://www.cnblogs.com/skillking/p/9788052.html
Copyright © 2011-2022 走看看