对于 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
时间: 2025-01-02 15:45:12