用js实现排序算法之:快速排序

版本一:

    function quickSort(arr, right, left) {
        var temp, i = right, j = left;
        if (i >= j) {
            return
        }
        while (i < j) {
            while (arr[i] <= arr[j] && i < j) {
                j--
            }
            if (i < j) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                i++;
            }
            while (arr[i] <= arr[j] && i < j) {
                i++
            }
            if (i < j) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                j--;
            }
        }
        quickSort(arr, right, i - 1);
        quickSort(arr, i + 1, left);
    }

使用方式:

 var arr = [4, 51, 2, 2, 1, 32, 1, 1, 2, 21, 1,2,3,1,2,111,2,2];
 quickSort(arr, 0, arr.length - 1);
 console.log(arr);

这种方式会对原数组产生影响。


版本2:

引用自:http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html

function quickSort(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));
}

这种方法理解起来比较简单,但是空间消耗比较严重。

你可能感兴趣的:(用js实现排序算法之:快速排序)