桶排序

This commit is contained in:
nonstriater
2015-11-30 18:21:29 +08:00
parent fc7173b2bc
commit e11ab31fe0
2 changed files with 5 additions and 18 deletions
+1 -3
View File
@@ -69,10 +69,8 @@
* 堆排序
**线性排序算法**
* 基数排序
* 桶排序
* 计数排序
### 查找算法
+4 -15
View File
@@ -16,10 +16,8 @@
* 堆排序
**线性排序算法**
* 基数排序
* 桶排序
* 计数排序
## 交换排序算法
@@ -238,25 +236,16 @@
选择排序|冒泡排序|希尔排序
## 3种线性排序算法
## 线性排序算法
上面的算法都是基于比较的排序,时间复杂度最好也是 NlogN.而非基于比较的排序,可以突破NlogN的时间下限。当然,非比较的排序,也是需要有一些限定条件的。
### 桶排序 bucket sort
### 计数排序 counting sort
### 基数排序 radix sort
如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
空间复杂度为O(1),不表示只有1个或少数几个空间,而是说一个常量空间,可以是几千,几万。。
这里要求`待排序的数字在限定的范围内如【0,65535】`;这样我们可以使用hash sort,也就是分配一个hash[6535]的空间,初始化为0,遍历一遍,出现的数字就hash[k]++,这样再次遍历一次,就可以得到n个数的顺序了。
比如给全校学生做个分数排序,最大分100分。我们使用一个100个空间的辅助数据,以key为分数,value为命中的次数。通过O(n)复杂度就可以完成排序任务。这种排序方式就是桶排序。
也就是分配一个hash[100]的空间,初始化为0,遍历一遍,出现的数字就hash[k]++,这样再次遍历一次,就可以得到n个数的顺序了。