JS快速排序

来源:互联网 发布:java程序员个人简历 编辑:程序博客网 时间:2024/06/05 20:32

最近在看了点算法,下面是用JS写的最常用的快速排序。综合了网上很多例子,我觉得下面这个针对于快速排序的特点而言是最好的,之后有一个阮一峰写的,看起来简单易懂,但是我觉得他这种写法已经完全没有了快速排序原址排序的特点。

DEMO1
脱胎于百度百科,自己理解后简单化下分享给大家。

/** * Created by ZH-PC on 2016/10/3. */var arr=[66,13,51,76,81,26,57,69,23];function quickSort(arr) {    function innerSort(start,last){        var i=start;        var j=last-1;        var pivot=arr[start];        if(last>start){            while(i<j) {                for (; j > i; j--) {                    if (pivot > arr[j]) {                        arr[i] = arr[j];                        i+=1;                        break;                    }                }                for (; i < j; i++) {                    if (pivot < arr[i]) {                        arr[j] = arr[i];                        j-=1;                        break;                    }                }            }            arr[i]=pivot;            innerSort(0,i);            innerSort(i+1,last);        }    }    innerSort(0,arr.length);    return arr;}console.log(quickSort(arr));

阮一峰——
原文地址:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html
“`
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));
};
我个人觉得,阮一峰写的是有点问题的,首先,新创建的left、right数组已经脱离了快速排序原址排序的特点;其次,极端的试想下,如果待排序的数组A.length->+∞,那么多次的递归需要划分多大的空间来储存新的left[],right[]?

大家有什么想法分享一下,一起进步吖~
0 0