This commit is contained in:
linghuam 2019-06-03 19:49:04 +08:00
parent 68c52cb778
commit cf6ca0e3ea
7 changed files with 42 additions and 1 deletions

View File

@ -127,4 +127,21 @@ function binarySearch(arr, value) {
}
}
return -1;
}
function quickSort(arr) {
if (arr.length < 2) return arr;
var baseIndex = Math.floor(arr.length / 2);
var leftArr = [];
var rightArr = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (i !== baseIndex) {
if (arr[i] < arr[baseIndex]) {
leftArr.push(arr[i]);
} else {
rightArr.push(arr[i]);
}
}
}
return quickSort(leftArr).concat([arr[baseIndex]]).concat(quickSort(rightArr));
}

View File

@ -1,4 +1,4 @@
# 学习js数据结构与算法
# 学习js数据结构与算法 & 算法图解
## 栈
@ -642,6 +642,30 @@ function partition(arr, left, right) {
}
```
```js
// 《算法图解》思路
// 基线条件空数组或长度为1的数组不需要排序
// 递归条件:每次选择一个基准值,得到三个部分(小于基准值 + 基准值 + 大于基准值)
// 对基准值两边的数组继续快排,并将最后的数组合并
function quickSort(arr) {
if (arr.length < 2) return arr; // 基线条件
var baseIndex = Math.floor(arr.length / 2); // 基准值
var leftArr = [];
var rightArr = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (i !== baseIndex) {
if (arr[i] < arr[baseIndex]) {
leftArr.push(arr[i]); // 小于基准值部分
} else {
rightArr.push(arr[i]); // 大于基准值部分
}
}
}
// 最后合并
return quickSort(leftArr).concat([arr[baseIndex]]).concat(quickSort(rightArr));
}
```
### 顺序搜索
一一对比。