快速排序算法

  • 在数据集之中,选择一个元素作为”基准”(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));

  1. <a name="Jmoga"></a>
  2. ## 归并排序
  3. ```javascript
  4. function sort(arr){
  5. if(arr.length <= 1) return arr; // 递归时需要一个返回值来说明什么时候结束
  6. var left = arr.slice(0, arr.length/2)
  7. var right = arr.slice(arr.length/2)
  8. return merge(sort(left), sort(right)
  9. }
  10. function merge(left, right){
  11. var result = []
  12. while(left.length && right.length){
  13. var x = left.shift(), y = right.shift()
  14. if(x < y){
  15. result.push(x)
  16. right.unshift(y)
  17. } else {
  18. result.push(y)
  19. left.unshift(x)
  20. }
  21. }
  22. if(left.length) result = [...result, ...left]
  23. if(right.length) result = [...result, ...right]
  24. return result
  25. }