快速排序作為經典演算法,基本面試中都會遇到,今天記錄一下。
1.非遞迴版,這裡也是使用乙個棧的模型(自己實現)來實現。需要注意的是inte***ce轉int需要斷言。
package main
import (
"container/list"
"fmt"
)// stack is stack
type stack struct
func newstack() *stack
}func (stack *stack) push(value inte***ce{})
func (stack *stack) pop() inte***ce{}
return nil
}func (stack *stack) isempty() bool
func main()
quicksort(nums, 0, len(nums)-1)
fmt.println(nums)
}func quicksort(nums int, low, high int)
right, ok := stack.pop().(int)
if !ok
pivot := partition(nums, left, right)
if left < pivot-1
if right > pivot+1
} }}func partition(nums int, low, high int) int
nums[low], nums[high] = nums[high], nums[low]
for low < high && nums[high] > pivotkey
nums[low], nums[high] = nums[high], nums[low]
} return high
}
2.遞迴版
package main
import "fmt"
func main()
quicksort(nums)
fmt.println(nums)
}func quicksort(nums int)
func qsort(nums int, low, high int)
}func partition(nums int, low, high int) int
nums[low], nums[high] = nums[high], nums[low]
for low < high && nums[low] < pivotkey
nums[low], nums[high] = nums[high], nums[low]
} return low
}
排序 快速排序 平民版,公升級版
利用遞迴實現快排 將陣列或者子陣列劃分成左右兩個陣列 如何劃分成左右兩個陣列,是第二步會講的 呼叫自身對左邊陣列和右邊陣列進行排序。public void recquicksort int left,int right else 劃分所作的事情是,在陣列中選取乙個pivot樞紐值,然後劃分成兩個陣列...
golang 並行快速排序,歸併排序模板
快速排序 當遞迴終止時,結束乙個waitgroup,遞迴開始時,加入乙個waitgroup直到所有排序操作結束,waitgroup空 快排流程 import fmt sync var wg sync.waitgroup func quicksort a int,l,h int i,j,k l 1,h...
快速排序的java版
package quicksort public class swap public void doswap public int getx public int gety package quicksort public class quicksort private int partition ...