java - 不用递归如何实现快速排序?
天蓬老师
天蓬老师 2017-04-17 17:32:13
0
3
697

今天想到一个问题,我记得《剑指offer》这本书里面说过:递归都可以转换成循环。那么怎么用循环来实现快速排序,我迄今为止看到的所有快速排序都是用的递归,于我试着写,想了半个小时居然一点头绪都没有。

有哪位大大能够写循环实现的,想开开眼界

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(3)
阿神

用棧儲存,對著改就好了

function qsort_with_loop(arr) {
  let stack = [];

  stack.push([0, arr.length - 1]);

  while (stack.length) {
    let _ = stack.pop();
    let i = l = _[0];
    let j = r = _[1];
    let mid = arr[(i + j) >> 1];

    do {
      while (arr[i] < mid) ++i;
      while (arr[j] > mid) --j;
      if (i <= j) {
        let t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
        ++i;
        --j;
      }
    } while (i <= j);

    if (i < r) stack.push([i, r]);
    if (l < j) stack.push([l, j]);
  }
}

寫了兩個版本,你對照一下: https://jsfiddle.net/hsfzxjy/ob8x16uz/4/

Ty80

可以用棧儲存狀態 也就是高階語言實作遞歸的本質

巴扎黑

雷雷

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板