package sort_nlogn
func QuickSort(nums []int, i, j int) {
if i >= j {
return
}
mid := partition(nums, i, j)
QuickSort(nums, i, mid-1)
QuickSort(nums, mid+1, j)
}
func partition(nums []int, i, j int) int {
pivot := i
i++
for i < j {
for i < j && nums[i] < nums[pivot] {
i++
}
for i < j && nums[j] > nums[pivot] {
j--
}
if i != j {
nums[i], nums[j] = nums[j], nums[i]
i++
j--
}
}
if i != j {
nums[j], nums[pivot] = nums[pivot], nums[j]
return j
}
if nums[pivot] < nums[j] {
j--
}
nums[j], nums[pivot] = nums[pivot], nums[j]
return j
}