码迷,mamicode.com
首页 > 其他好文 > 详细

俩头查找的快排优化

时间:2015-09-14 19:46:26      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

对于 5743 经典快排过程:

  1. 5473

  2. 5437

会造成多次替换,所以写出优化算法:

  1. 去第一位为基准值

  2. 从左向右扫 发现大值

    1. 从右向左扫 发现小值 替换

  3. 将基准值和最后一个小值替换

function quick(arr, start, end) {
    if (start >= end-1) {
        return;
    }
    var mini = start;
    var maxi = end;
    var split = arr[start];
    while (mini < maxi) {
        var minv = arr[mini];
        if (minv > split) {
        	var find=false;
            while (mini < maxi) {
                maxi--;
                var maxv = arr[maxi];
                if (maxv <= split) {
                	find=true;
                    arr[mini] = maxv;
                    arr[maxi] = minv;
                    break;
                }
            }
            if(!find){
            	break;
            }
        }
        mini++;
    }
    arr[start]=arr[mini-1];
    arr[mini-1]=split;


    console.log(arr.slice(start,end));

    quick(arr, start, mini - 1);
    quick(arr, mini, end);
    return arr;
}

P.S. 算法好想 边界问题消耗了n长时间 特别是find

俩头查找的快排优化

标签:

原文地址:http://my.oschina.net/u/132038/blog/505994

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!