快速排序
1. 排序过程
快速排序的基本思想是通过一趟排序将排序的数据分割成独立两部分,其中一部分的所有数据都比另一部分小,再采用递归方式,以使得整个数组变得有序。
2. 代码实现
func quickSort(arr []int, left ,right int) { //递归实现快排
if left >= right { //如果左指针大于等于右指针,结束递归
return
}
l,r,cur := left,right,arr[left]
for l < r { //指针循环,当l == r的时候说明所有的值都被遍历完
//因为这里的基准cur取的是左边的端点arr[left],所以先移动右边的指针,最后要和左边的值互换,因此要先移动右指针
for l < r && arr[r] >= cur { //如果满足l< r 并且 r的值大于基准值时,r指针左移
r --
}
for l < r && arr[l] <= cur{ //相同,如果l<r 并且l的值小于 基准值,l指针右移
l ++
}
//两种情况,要么l == r
//要么 arr[l] < cur 并且arr[r] > cur
arr[l],arr[r] = arr[r],arr[l] //
}
arr[left],arr[r] = arr[r],arr[left] //将cur和中间的值交换
quickSort(arr,left,l - 1) //向左递归
quickSort(arr,l +1,right) //向右递归
}