LeetCode 打卡 Day 36 —— 颜色分类

1、题目

2、题解

看到题目中说不能使用库中的sort函数,所以突发奇想决定自己实现快排序试试,顺便回忆快排,谁能想到还踩了不少坑,具体快排算法就不粘贴了,网上好多,我的代码如下。

func sortColors(nums []int)  {
    qsort(nums, 0, len(nums)-1)
    return
}

func qsort(arr []int, start, end int) {
    // fmt.Println("----")
    // fmt.Println(arr)
    if end <= start{
        return
    }
    povit := partition(arr, start, end)
    qsort(arr, start, povit-1)
    qsort(arr, povit+1, end)
}

func partition(arr []int, start, end int) int {
    i:=start
    povit:=arr[start]
    for start<end {
        // fmt.Println("++++", povit)
        // fmt.Println(arr)
        for start<end && arr[end]>=povit {
            end--
        }
        for start<end && arr[start]<=povit {
            start++
        }
        if start<end{
            t:=arr[start]
            arr[start]=arr[end]
            arr[end]=t
        }
        // fmt.Println(arr)
    }
    arr[i]=arr[start]
    arr[start]=povit
    return start
}

提交结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值