一、桶排序的原理是什么?
桶排序,就是利用桶进行排序。
什么是桶呢?这里不要把它想复杂了,桶并不是一个新的高大上的数据结构,它只是一个装元素的容器。
比如现在有一个待排序的数组A:
Array[] = { 10,7,8,12,19,3,1,5}
不难发现,其中的元素值均处在0~20之间,那我们不妨设计四个桶,其中所装元素值分别为[0,5),[5,10),[10,15),[15,20)之间。
显然,通过一次遍历很容易将A中所有元素都放入其对应的桶中,且因为每个桶的区间都无交集,每个元素归属唯一的桶:
第一个桶:1,3
第二个桶:5,7,8
第三个桶:10,12
第四个桶:19
不妨想一下,这样做有什么好处呢?
我们发现,因为桶与桶之间是严格有序的,我们只需调整每个桶内元素的顺序,然后将桶丢弃,按顺序组合元素即可完成排序。
比起将整个数组排序,桶内排序这件事的难度要小很多,这就充分利用了“大事化小”的思想。(计数排序相当于是桶容量为1时的极端情况)
但是桶排序也有一定的缺点,构造桶时,无论是用数组还是链表,都会带来不小的空间开销,相当于是在“用空间换时间”。其次,桶排序适合那些分布比较均匀的数据,每个桶内的数据越平均,桶排序耗费的时间也就越少。
二、桶排序简单实现
假设有一数组,其元素值都在0~1之间,用桶排对其进行排序。
构造桶:以0.1为间隔构造十个桶
分桶:一次遍历将所有元素放到对应的桶中
部分排序:偷懒直接用库函数 - -,也可以自己实现一个排序
下面是代码:
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
void</