From c527f839159db972e21ccf2613411abaa4bec55d Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sat, 30 Dec 2017 14:41:32 +0800 Subject: [PATCH 1/8] Update 4.shellSort.md --- 4.shellSort.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/4.shellSort.md b/4.shellSort.md index 0406030..b2e2e93 100644 --- a/4.shellSort.md +++ b/4.shellSort.md @@ -63,6 +63,30 @@ def shellSort(arr): } ``` +不太明白作者一下代码的含义, +```python +while(gap < len(arr)/3): + gap = gap*3+1 +``` +按照大部分博客说每次都除以2,以下代码也是可行的 +```python +def shellSort(arr): + import math + gap=len(arr)/2 + + while gap > 0: + for i in range(gap,len(arr)): + temp = arr[i] + j = i-gap + while j >=0 and arr[j] > temp: + arr[j+gap]=arr[j] + j-=gap + arr[j+gap] = temp + gap = gap/2 + return arr + +``` + ## 4. Go 代码实现 ```go From 9b31538b85feba70c83bf1e3e156992f82bc9183 Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sat, 30 Dec 2017 14:51:44 +0800 Subject: [PATCH 2/8] Update 4.shellSort.md --- 4.shellSort.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/4.shellSort.md b/4.shellSort.md index b2e2e93..98043e1 100644 --- a/4.shellSort.md +++ b/4.shellSort.md @@ -9,6 +9,8 @@ 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 +下面给出博客[八大排序算法-shell 排序](http://blog.csdn.net/qishouzhang/article/details/47065381) 中的一张图 +![](http://p1r3973u8.bkt.clouddn.com/image/jpg/sort-shell.jpg20150726092554557) ## 1. 算法步骤 From 106a93f03d3f289e1af986ed35610030815f3a25 Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sat, 30 Dec 2017 14:52:12 +0800 Subject: [PATCH 3/8] Update 4.shellSort.md --- 4.shellSort.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/4.shellSort.md b/4.shellSort.md index 98043e1..925e24f 100644 --- a/4.shellSort.md +++ b/4.shellSort.md @@ -10,6 +10,8 @@ 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 下面给出博客[八大排序算法-shell 排序](http://blog.csdn.net/qishouzhang/article/details/47065381) 中的一张图 + + ![](http://p1r3973u8.bkt.clouddn.com/image/jpg/sort-shell.jpg20150726092554557) ## 1. 算法步骤 From 59683d9122073b7954bc549fad7dbd5ce8d39da5 Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sat, 30 Dec 2017 15:26:36 +0800 Subject: [PATCH 4/8] Update 5.mergeSort.md --- 5.mergeSort.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/5.mergeSort.md b/5.mergeSort.md index e1e1479..0fdf9c5 100644 --- a/5.mergeSort.md +++ b/5.mergeSort.md @@ -76,10 +76,9 @@ function merge(left, right) ```python def mergeSort(arr): - import math if(len(arr)<2): return arr - middle = math.floor(len(arr)/2) + middle = len(arr)/2 left, right = arr[0:middle], arr[middle:] return merge(mergeSort(left), mergeSort(right)) @@ -87,13 +86,13 @@ def merge(left,right): result = [] while left and right: if left[0] <= right[0]: - result.append(left.pop(0)); + result.append(left.pop(0)) else: - result.append(right.pop(0)); + result.append(right.pop(0)) while left: - result.append(left.pop(0)); + result.extend(left) while right: - result.append(right.pop(0)); + result.extend(right) return result ``` From f8bf649bd3953a295f34c87ea8b2dadc9df727e0 Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sat, 30 Dec 2017 15:30:39 +0800 Subject: [PATCH 5/8] Update 5.mergeSort.md --- 5.mergeSort.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/5.mergeSort.md b/5.mergeSort.md index 0fdf9c5..76a86c8 100644 --- a/5.mergeSort.md +++ b/5.mergeSort.md @@ -89,9 +89,9 @@ def merge(left,right): result.append(left.pop(0)) else: result.append(right.pop(0)) - while left: + if left: result.extend(left) - while right: + if right: result.extend(right) return result ``` From 7fffb4e86f7fb67572ccc2322aa8e3ca0e33b44c Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sun, 31 Dec 2017 00:50:46 +0800 Subject: [PATCH 6/8] Update 6.quickSort.md --- 6.quickSort.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/6.quickSort.md b/6.quickSort.md index d08b28f..f914ea6 100644 --- a/6.quickSort.md +++ b/6.quickSort.md @@ -21,6 +21,16 @@ 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 +下面给出一个示例: +假设有数据6 1 2 7 9 3 4 5 10 8 +首先用6当作基准,使用i j两个指针分别从两边进行扫描,把比6小的元素和比6大的元素分开。 +取出6那么就留个坑变成:_ 1 2 7 9 3 4 5 10 8 +从右边(j)开始,一步步向左移,找到比6小的数;这个数为5,将5放置到坑中,留下新的坑:5 1 2 7 9 3 4 _(j) 10 8 +然后从左边(i)一步步向右移,找到比6大的数,这个数为7,将7放置到坑中,留下新的坑:5 1 2 _(i) 9 3 4 7(j) 10 8。其实这两步就是将5和7互换。 +然后j继续右移找到比6小的数4,i左移动找到比6大的数9,然后互换,依次变成:5 1 2 4(i) 9 3 _(j) 7 10 8 和 5 1 2 4 _(i) 3 9(j) 7 10 8 +然后j继续右移,发现3<6,然后3填坑,留下新的坑:5 1 2 4 3(i) _(j) 9 7 10 8 +然后i继续左移,发现i=j,此时把基准6填在碰头的位置5 1 2 4 3 6(i)(j) 9 7 10 8 +此时我们已经将原来的序列,以 6 为分界点拆分成了两个序列,左边的序列是“5 1 2 4 3”,右边的序列是“ 9 7 10 8 ”然后递归左边和右边。 ## 2. 动图演示 From 60df975b90c7b03cc015f03eef56068257a2be8a Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sun, 31 Dec 2017 00:51:28 +0800 Subject: [PATCH 7/8] Update 6.quickSort.md --- 6.quickSort.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/6.quickSort.md b/6.quickSort.md index f914ea6..c7c1973 100644 --- a/6.quickSort.md +++ b/6.quickSort.md @@ -22,6 +22,7 @@ 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 下面给出一个示例: +``` 假设有数据6 1 2 7 9 3 4 5 10 8 首先用6当作基准,使用i j两个指针分别从两边进行扫描,把比6小的元素和比6大的元素分开。 取出6那么就留个坑变成:_ 1 2 7 9 3 4 5 10 8 @@ -31,7 +32,8 @@ 然后j继续右移,发现3<6,然后3填坑,留下新的坑:5 1 2 4 3(i) _(j) 9 7 10 8 然后i继续左移,发现i=j,此时把基准6填在碰头的位置5 1 2 4 3 6(i)(j) 9 7 10 8 此时我们已经将原来的序列,以 6 为分界点拆分成了两个序列,左边的序列是“5 1 2 4 3”,右边的序列是“ 9 7 10 8 ”然后递归左边和右边。 - +``` +可参考:[算法 3:最常用的排序——快速排序](http://wiki.jikexueyuan.com/project/easy-learn-algorithm/fast-sort.html) ## 2. 动图演示 ![动图演示](res/quickSort.gif) From d931f55a57afc2168bfc7c664db2ce8f43aaaeaf Mon Sep 17 00:00:00 2001 From: JC For Short <1625742718@qq.com> Date: Sun, 31 Dec 2017 13:15:30 +0800 Subject: [PATCH 8/8] Update 7.heapSort.md --- 7.heapSort.md | 1 + 1 file changed, 1 insertion(+) diff --git a/7.heapSort.md b/7.heapSort.md index d4bfa49..de92ac9 100644 --- a/7.heapSort.md +++ b/7.heapSort.md @@ -18,6 +18,7 @@ 4. 重复步骤 2,直到堆的尺寸为 1。 +过程示例可参考:[图解排序算法(三)之堆排序](https://www.cnblogs.com/chengxiao/p/6129630.html) ## 2. 动图演示