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和微服务架构