快排 quicksort 快速排序

首先看这个

http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html

看完后就没有什么不理解的了...

PS

注意 凡是在一趟比较中l 或者 r的值改变了
都需要检测一下 l 是否还是 满足 l < r

function quick(arr, start, end) {
    if (start < end) {
        var l = start;
        var r = end;
        var tmp = arr[l];
        while (l < r) {
            while (l < r && arr[r] > tmp) r--;
            if (l < r) {
                arr[l] = arr[r];
                l++;  //l这个坑已经填好了  那么下次从左边数应该从这个坑后面的位置开始 //所以是l++ 而不是 r--
            }
          console.log('r' + arr);
            while (l < r && arr[l] < tmp) l++;
            if (l < r) {
                arr[r] = arr[l];
                r--;
            }
          console.log('l' + arr);
        }
        arr[l] = tmp;
        console.log(arr);
        quick(arr, start, l - 1);
        quick(arr, l + 1, end);
    }
}

arr = [23,12,54,67,34,88];
quick(arr,0 ,arr.length-1);
console.log();

 

posted @ 2015-03-15 21:00  cart55free99  阅读(166)  评论(0编辑  收藏  举报