桶排序 bucket_sort

桶排序是一种排序算法,利用空间换取时间效率。当数据规模不大时,其时间复杂度可达到理想水平。若无额外空间,时间复杂度则取决于桶内排序算法。例如,对于数组[1, 3, 2, 5, 3, 7, 4, 9],可以建立一个足够大的辅助数组进行排序。而在实际场景如[299, 100, 20000, 1, 3, 10, 102]中,通过设计映射函数确定桶的数量,将数据分配到相应桶内,再用适合的排序方法对每个桶排序,最后将桶中数据按顺序合并回原数组。" 133892031,19687573,Java创建带初始值的列表:ArrayList、Arrays.asList和LinkedList示例,"['Java', '开发语言', '数据结构']
摘要由CSDN通过智能技术生成

首先如果数据的大小如果不大的情况下,通排序是可以达到O(N)时间复杂度的.

  1. 这完全使用空间来换时间
  2. 没有空间的话,通排序的时间复杂度取决于在各个桶内采取的排序算法的时间复杂度.

eg:有数组vector<int> nums = [1,3,2,5,3,7,4,9]

solution:

建立一个数组,大小是nums中最大的数加1,

//找到最大值
auto max_value = max_element(nums.begin(), nums.end());
//建立数组
int arr[*max_value + 1] = {0};

//将数据保存到数组中,下表i对应数据i.arr[nums[i]]中的值对应nums[i]出现的次数
for(int i = 0; i < nums.size(); i++){
    ++arr[nums[i]];
}
/*可以观察到,nums中没有出现的数据,在arr中对应的位置为0,
所以从i= 0到*max_value + 1进行遍历arr数组,不是0的就打印i,arr等于几就打印几次,
可以观察到这会出现大量的浪费数组空间,所以是用空间换时间的方法
*/
for(int i = 0; i <=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值