From e11ab31fe0cbc64cadda57c73fcd56f1a798a27a Mon Sep 17 00:00:00 2001 From: nonstriater <410495266@qq.com> Date: Mon, 30 Nov 2015 18:21:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=B6=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +--- 排序算法/README.md | 19 ++++--------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 5893c30..627c74e 100644 --- a/README.md +++ b/README.md @@ -69,10 +69,8 @@ * 堆排序 **线性排序算法** - -* 基数排序 + * 桶排序 -* 计数排序 ### 查找算法 diff --git a/排序算法/README.md b/排序算法/README.md index 6ed7a1b..b9adde1 100644 --- a/排序算法/README.md +++ b/排序算法/README.md @@ -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个数的顺序了。