go实现快速排序

go实现快速排序

package main

import (
    "log"
)

var c = 0

func main() {

    var aa []int = []int{5, 2, 3, 11, 13, 27, 1, 38, 0, 6, 4, 7, 9, 15, 33, 30}
    log.Println(aa)
    qs(aa)
    log.Println(aa)
    // log.Println("quick sort result: ", quickSort(aa))

}
/*
func quickSort(s []int) []int {
    if len(s) < 2 {
        return s
    }

    v := s[0]
    var left, right []int
    for _, e := range s[1:] {
        if e <= v {
            left = append(left, e)
        } else {
            right = append(right, e)
        }
    }

    // 实现了“quickSort(left) + v + quickSort(right)”的操作
    return append(append(quickSort(left), v), quickSort(right)...)
}
*/

func qs(a []int) {
    c++
    log.Println("agin", a)
    flag := a[0]
    l := 0
    r := len(a) - 1
    bb := false
    for l <= r {

        if bb == true {
            if a[l] > flag {
                a[r] = a[l]
                bb = false
                r--
            } else {
                l++
            }

        } else {
            if a[r] < flag {
                a[l] = a[r]
                bb = true
                l++
            } else {
                r--
            }

        }
        if l == r {

            a[l] = flag
            log.Println("swap", a)
            // 先序遍历
            if l >= 2 {
                log.Println("in1", c, l, a)
                qs(a[0:l])
            }
            if len(a)-l >= 3 {
                log.Println("in2", c, l, a)
                qs(a[l+1 : len(a)])
            }
        }

    }

}

  中间注释的是参考别人实现的,可以对比分析一下

原文链接: https://www.cnblogs.com/oxspirt/p/12598648.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    go实现快速排序

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/377639

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月3日 下午1:37
下一篇 2023年3月3日 下午1:37

相关推荐