func main() {
nums := []int{6, 10, 2, 4, 9, 15, 5, 39, 15, 7, 6, 13}
fastSort(nums)
fmt.Println(nums)
}
func fastSort(nums []int) {
for i := 1; i <= len(nums) - 1; i++ {
current := nums[i]
prev := i - 1
if current < nums[prev] {
for ; prev >= 0 && current < nums[prev]; prev-- {
nums[prev+1] = nums[prev]
}
nums[prev+1] = current
}
}
}
快排内层循环是最关键的,内层循环会倒序对比前一个元素的大小 current < nums[prev]
如果小于则将前一个元素向后移一位。
截止到前一个元素大于当前元素停止后移,然后将当前元素设置在前一个元素的后一个下标
for ; prev >= 0 && current < nums[prev]; prev-- {
nums[prev+1] = nums[prev]
}
内层前三次循环简单写一下
6, 10, 2
第一次: 10 > 6 不需要后移交换
第二次: 2 < 10 数组后移变成 6, 10, 10
第三次: 2 < 6 数组后移变成 6, 6, 10
然后根据 prev >= 0
条件跳出循环
把元素 2 设置在 0 下标,变成 2, 6, 10