profiling/cpu/quicksort.go (26 lines of code) (raw):
package cpu
func QuickSort(nums []int) {
if len(nums) < 2 {
return
}
quickSortHelper(nums, 0, len(nums)-1)
}
func quickSortHelper(nums []int, low, high int) {
if low < high {
pivotIndex := partition(nums, low, high)
quickSortHelper(nums, low, pivotIndex-1)
quickSortHelper(nums, pivotIndex+1, high)
}
}
func partition(nums []int, low, high int) int {
pivot := nums[high]
i := low - 1
for j := low; j < high; j++ {
if nums[j] <= pivot {
i++
nums[i], nums[j] = nums[j], nums[i]
}
}
nums[i+1], nums[high] = nums[high], nums[i+1]
return i + 1
}