桶排序
This commit is contained in:
+4
-15
@@ -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个数的顺序了。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user