标签:
对于 5743 经典快排过程:
5473
5437
会造成多次替换,所以写出优化算法:
去第一位为基准值
从左向右扫 发现大值
从右向左扫 发现小值 替换
将基准值和最后一个小值替换
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