快速排序算法
- 在数据集之中,选择一个元素作为”基准”(pivot)。
- 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。
- 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 ```javascript var arr = [1, 54, 32, 87, 43, 5, 13, 14, 25, 45, 3, 26, 67, 92];
var quickSort = (arr) => { if (arr.length <= 1) return arr; var left = [], right = [];
var povitIndex = Math.floor(arr.length / 2); var pivot = arr.splice(povitIndex, 1)[0]; // 这一步很重要,因为splice 会改变源数组,因此需要保存更改的值
arr.forEach((item) => { if (item < pivot) left.push(item); if (item > pivot) right.push(item); }); return quickSort(left).concat([pivot], quickSort(right)); };
console.log(quickSort(arr));
<a name="Jmoga"></a>## 归并排序```javascriptfunction sort(arr){if(arr.length <= 1) return arr; // 递归时需要一个返回值来说明什么时候结束var left = arr.slice(0, arr.length/2)var right = arr.slice(arr.length/2)return merge(sort(left), sort(right)}function merge(left, right){var result = []while(left.length && right.length){var x = left.shift(), y = right.shift()if(x < y){result.push(x)right.unshift(y)} else {result.push(y)left.unshift(x)}}if(left.length) result = [...result, ...left]if(right.length) result = [...result, ...right]return result}
