From da9dcacd0659aaee57d5d2b783be38618a1b2fe7 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Fri, 16 Mar 2018 12:04:38 +0800 Subject: [PATCH 01/10] Update 2.selectionSort.md --- 2.selectionSort.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/2.selectionSort.md b/2.selectionSort.md index ae7350f..1116376 100644 --- a/2.selectionSort.md +++ b/2.selectionSort.md @@ -22,7 +22,7 @@ ```js function selectionSort(arr) { var len = arr.length; - var minIndex, temp; + var minIndex; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { @@ -30,10 +30,11 @@ function selectionSort(arr) { minIndex = j; // 将最小数的索引保存 } } - temp = arr[i]; - arr[i] = arr[minIndex]; - arr[minIndex] = temp; - } + arr[i] = arr[i] ^ arr[minIndex]; + arr[minIndex] = arr[i] ^ arr[minIndex]; + arr[i] = arr[i] ^ arr[minIndex]; + // 或者使用ES6的解构赋值 +    } return arr; } ``` From 7b23fcbd5ec220e82d2bf21b3a6cd0ffb840b204 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Fri, 16 Mar 2018 12:19:45 +0800 Subject: [PATCH 02/10] Update 3.insertionSort.md --- 3.insertionSort.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/3.insertionSort.md b/3.insertionSort.md index 71beec9..0abd3c8 100644 --- a/3.insertionSort.md +++ b/3.insertionSort.md @@ -21,16 +21,14 @@ ```js function insertionSort(arr) { - var len = arr.length; - var preIndex, current; - for (var i = 1; i < len; i++) { + var preIndex; + for (var i = 1; i < arr.length; i++) { preIndex = i - 1; - current = arr[i]; - while(preIndex >= 0 && arr[preIndex] > current) { - arr[preIndex+1] = arr[preIndex]; + while(preIndex >= 0 && arr[preIndex] > arr[i]) { + arr[preIndex + 1] = arr[preIndex]; preIndex--; } - arr[preIndex+1] = current; + arr[preIndex + 1] = arr[i]; } return arr; } From 24d5ce55a39ee2d035ca604ec3bbc380250f2ced Mon Sep 17 00:00:00 2001 From: Rain120 Date: Fri, 16 Mar 2018 12:28:46 +0800 Subject: [PATCH 03/10] Update 6.quickSort.md --- 6.quickSort.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/6.quickSort.md b/6.quickSort.md index 497f973..e199255 100644 --- a/6.quickSort.md +++ b/6.quickSort.md @@ -30,6 +30,24 @@ ## 3. JavaScript 代码实现 ```js +// NO.1 Solution +var quickSort = function(arr) { + if (arr.length <= 1) { return arr; } + var pivotIndex = Math.floor(arr.length / 2); //基准位置(理论上可任意选取) + var pivot = arr.splice(pivotIndex, 1)[0]; //基准数 + var left = []; + var right = []; + for (var i = 0; i < arr.length; i++){ + if (arr[i] < pivot) { + left.push(arr[i]); + } else { + right.push(arr[i]); + } + } + return quickSort(left).concat([pivot], quickSort(right)); //链接左数组、基准数构成的数组、右数组 +}; + +// NO.2 Solution function quickSort(arr, left, right) { var len = arr.length, partitionIndex, From 75be825ffedce4345b261b74649e1a4d99955f07 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Fri, 16 Mar 2018 14:17:25 +0800 Subject: [PATCH 04/10] Update 4.shellSort.md --- 4.shellSort.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/4.shellSort.md b/4.shellSort.md index c96d8b7..606c2d4 100644 --- a/4.shellSort.md +++ b/4.shellSort.md @@ -9,6 +9,7 @@ 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 + ![希尔排序演示](https://segmentfault.com/img/bVNRxY?w=542&h=383) ## 1. 算法步骤 @@ -18,7 +19,6 @@ 3. 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。 - ## 2. JavaScript 代码实现 ```js From 44f63c0d910da5fcaaffeb66571c32e773eac249 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Fri, 16 Mar 2018 14:37:09 +0800 Subject: [PATCH 05/10] Update 4.shellSort.md --- 4.shellSort.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/4.shellSort.md b/4.shellSort.md index 606c2d4..14b6418 100644 --- a/4.shellSort.md +++ b/4.shellSort.md @@ -22,20 +22,24 @@ ## 2. JavaScript 代码实现 ```js -function shellSort(arr) { +/** + * arr:  排序数组 + * gapLen: 排序增量 + **/ +function shellSort(arr, gapLen) { var len = arr.length, temp, gap = 1; - while(gap < len/3) { //动态定义间隔序列 - gap =gap*3+1; + while(gap < len / gapLen) { //动态定义间隔序列 + gap = gap * gapLen + 1; } - for (gap; gap > 0; gap = Math.floor(gap/3)) { + for (gap; gap > 0; gap = Math.floor(gap / gapLen)) { for (var i = gap; i < len; i++) { temp = arr[i]; - for (var j = i-gap; j >= 0 && arr[j] > temp; j-=gap) { - arr[j+gap] = arr[j]; + for (var j = i - gap; j >= 0 && arr[j] > temp; j -= gap) { + arr[j + gap] = arr[j]; } - arr[j+gap] = temp; + arr[j + gap] = temp; } } return arr; From eb4c5042913a3c89e24293a97d1ed24c47581439 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Fri, 16 Mar 2018 14:49:56 +0800 Subject: [PATCH 06/10] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a14f9c1..d5b95fd 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,8 @@ 本书内容几乎完全来源于网络。 +[参考地址](https://juejin.im/post/57dcd394a22b9d00610c5ec8#heading-15) + 开源项目地址:[https://github.com/hustcc/JS-Sorting-Algorithm](https://github.com/hustcc/JS-Sorting-Algorithm),整理人 [hustcc](https://github.com/hustcc)。 GitBook 在线阅读地址:[https://sort.hust.cc/](https://sort.hust.cc/)。 From 6421aa71ddb30400e18ccd65db9b5b76f00d6a6d Mon Sep 17 00:00:00 2001 From: Rain120 Date: Tue, 20 Mar 2018 10:30:09 +0800 Subject: [PATCH 07/10] Update 1.bubbleSort.md --- 1.bubbleSort.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1.bubbleSort.md b/1.bubbleSort.md index 621314f..c3efb4e 100644 --- a/1.bubbleSort.md +++ b/1.bubbleSort.md @@ -39,9 +39,9 @@ function bubbleSort(arr) { for (var i = 0; i < len - 1; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { // 相邻元素两两对比 - var temp = arr[j+1]; // 元素交换 - arr[j+1] = arr[j]; - arr[j] = temp; + arr[j] = arr[j] ^ arr[j + 1]; // 元素交换 + arr[j] = arr[j] ^ arr[j + 1]; + arr[j + 1] = arr[j] ^ arr[j + 1]; } } } From b62c681457d699fe44f1fbc7b8273f4a90674985 Mon Sep 17 00:00:00 2001 From: Rain120 <1085131904@qq.com> Date: Sun, 9 Jun 2019 16:34:43 +0800 Subject: [PATCH 08/10] Update 1.bubbleSort.md --- 1.bubbleSort.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/1.bubbleSort.md b/1.bubbleSort.md index c3efb4e..e8f1b9d 100644 --- a/1.bubbleSort.md +++ b/1.bubbleSort.md @@ -32,13 +32,27 @@ ## 5. JavaScript 代码实现 +```js +function bubbleSort(arr) { + var len = arr.length; + for (var i = 0; i < len - 1; i++) { + for (var j = 0; j < len - 1 - i; j++) { + if (arr[j] > arr[j + 1]) { + [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; + } + } + } + return arr; +} +``` + ```js function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len - 1; i++) { for (var j = 0; j < len - 1 - i; j++) { - if (arr[j] > arr[j+1]) { // 相邻元素两两对比 + if (arr[j] > arr[j + 1]) { // 相邻元素两两对比 arr[j] = arr[j] ^ arr[j + 1]; // 元素交换 arr[j] = arr[j] ^ arr[j + 1]; arr[j + 1] = arr[j] ^ arr[j + 1]; From a9e6c178bcfd796202053de538ec967cee59e140 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Tue, 25 Jan 2022 16:26:41 +0800 Subject: [PATCH 09/10] Update 3.insertionSort.md fixed: js bug --- 3.insertionSort.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/3.insertionSort.md b/3.insertionSort.md index 0abd3c8..4b2a29e 100644 --- a/3.insertionSort.md +++ b/3.insertionSort.md @@ -23,12 +23,13 @@ function insertionSort(arr) { var preIndex; for (var i = 1; i < arr.length; i++) { + var current = arr[i]; preIndex = i - 1; while(preIndex >= 0 && arr[preIndex] > arr[i]) { arr[preIndex + 1] = arr[preIndex]; preIndex--; } - arr[preIndex + 1] = arr[i]; + arr[preIndex + 1] = current; } return arr; } From afe97c362c05bc0e84965268baa2a65f1a18e854 Mon Sep 17 00:00:00 2001 From: Rain120 Date: Sun, 30 Jan 2022 12:21:02 +0800 Subject: [PATCH 10/10] Update 6.quickSort.md --- 6.quickSort.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/6.quickSort.md b/6.quickSort.md index d51e0d7..3616cab 100644 --- a/6.quickSort.md +++ b/6.quickSort.md @@ -97,6 +97,10 @@ function partition2(arr, low, high) { } function quickSort2(arr, low, high) { + const len = arr.length; + low = typeof low != 'number' ? 0 : low, + high = typeof high != 'number' ? len - 1 : high; + if (low < high) { let pivot = partition2(arr, low, high); quickSort2(arr, low, pivot - 1);