對於 5743 經典快排過程:算法
5473優化
5437ui
會形成屢次替換,因此寫出優化算法:code
去第一位爲基準值it
從左向右掃 發現大值io
從右向左掃 發現小值 替換console
將基準值和最後一個小值替換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