倆頭查找的快排優化

對於 5743 經典快排過程:算法

  1. 5473優化

  2. 5437ui

會形成屢次替換,因此寫出優化算法:code

  1. 去第一位爲基準值it

  2. 從左向右掃 發現大值io

    1. 從右向左掃 發現小值 替換console

  3. 將基準值和最後一個小值替換function

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長時間 特別是findclass

相關文章
相關標籤/搜索