快速排序作为经典算法,基本面试中都会遇到,今天记录一下。
1.非递归版,这里也是使用一个栈的模型(自己实现)来实现。需要注意的是interface转int需要断言。
package main
import (
"container/list"
"fmt"
)
// Stack is stack
type Stack struct {
stack *list.List
}
func newStack() *Stack {
list := list.New()
return &Stack{list}
}
func (Stack *Stack) push(value interface{}) {
Stack.stack.PushBack(value)
}
func (Stack *Stack) pop() interface{} {
e := Stack.stack.Back()
if e != nil {
Stack.stack.Remove(e)
return e.Value
}
return nil
}
func (Stack *Stack) isEmpty() bool {
return Stack.stack.Len() == 0
}
func main() {
var nums = []int{4, 1, 89, 18, 10}
quickSort(nums, 0, len(nums)-1)
fmt.Println(nums)
}
func quickSort(nums []int, low, high int) {
stack := newStack()
if low < high {
stack