Quicksort: Iterative or Recursive

后端 未结 3 742
梦毁少年i
梦毁少年i 2020-11-29 04:41

I learnt about quick sort and how it can be implemented in both Recursive and Iterative method.
In Iterative method:

  1. Push the range (0...n) into the stac
3条回答
  •  渐次进展
    2020-11-29 05:22

    That's the solution i came up with in Javascript. I think it works.

    function qs_iter(items) {
        if (!items || items.length <= 1) {
            return items
        }
        var stack = []
        var low = 0
        var high = items.length - 1
        stack.push([low, high])
        while (stack.length) {
            var range = stack.pop()
            low = range[0]
            high = range[1]
            if (low < high) {
                var pivot = Math.floor((low + high) / 2)
                stack.push([low, pivot])
                stack.push([pivot+1, high])
                while (low < high) {
                    while (low < pivot && items[low] <= items[pivot]) low++
                    while (high > pivot && items[high] > items[pivot]) high--
                    if (low < high) {
                        var tmp = items[low]
                        items[low] = items[high]
                        items[high] = tmp
                    }
                }
            }
        }
        return items
    }
    

    Let me know if you found a mistake :)

提交回复
热议问题