go解题答案
思路概括:默认最左为边界,先从右边找小,再从左边找大
思路核心:
1、pattition做交换,quickSort构造递归结构
2、默认最左为边界,先从右边找小,再从左边找大,没找到自己指针移动,找到交换,对方指针移动
3、循环结束要恢复边界值func MySort( arr []int ) []int { left,right:=0,len(arr)-1 quickSort(arr,left,right) return arr } func quickSort(arr []int,left int,right int){ if left < right { p:=partition(arr,left,right) quickSort(arr,left,p-1) quickSort(arr,p+1,right) } } func partition(arr []int,left int,right int)int{ p:=arr[left] // 默认最左位边界 for left<right { // 右边找小于边界 for left<right && arr[right]>p{ right-- // 没找到++ } if left<right { arr[left] = arr[right] //找到交换,用边界值作为中间临时变量 left++ } //左边找大于边界 for left<right&& arr[left]<p{ left++ // 没找到++ } if left<right { arr[right] = arr[left] //找到交换,用边界值作为中间临时变量 right-- } } arr[left]=p //恢复中间变量值 return left }
如果有帮助请点个赞哦, 更多文章请看我的博客
题主背景
从业8年——超级内卷500Q技术经理——目前专注go和微服务架构