func quickSort(nums []int, left int, right int) {
if left >= right {
return
}
p := quickSortPartition(nums, left, right)
quickSort(nums, left, p - 1)
quickSort(nums, p + 1, right)
}
func quickSortPartition(nums []int, left int, right int) int {
swap(nums, rand.Intn(right - left + 1) + left, left)
base := nums[left]
i := left
j := right
for i < j {
for i < j && base <= nums[j] {
j--
}
for i < j && base >= nums[i] {
i++
}
swap(nums, i, j)
}
nums[left] = nums[i]
nums[i] = base
return i
}
func swap(nums []int, i, j int) {
tmp := nums[i]
nums[i] = nums[j]
nums[j] = tmp
}
09-30
529
05-04
1852