Go使用goroutine并发的快速排序

经典面试题:快速排序。
一般都使用递归,但golang中利用goroutine的并发可以加快。

func QuickSort(data []int) []int {
    if len(data) <= 1 {
        return data
    }
    var wg sync.WaitGroup
    c := data[0]
    var s1, s2 []int

    for k, v := range data {
        if k == 0 {
            continue
        }
        if c > v {
            s2 = append(s2, v)
        } else {
            s1 = append(s1, v)
        }
    }

    wg.Add(2)
    go func() {
        s1 = QuickSort(s1)
        wg.Done()
    }()
    go func() {
        s2 = QuickSort(s2)
        wg.Done()
    }()
    wg.Wait()

    data = []int{c}
    if len(s1) > 0 {
        data = append(s1, data...)
    }
    if len(s2) > 0 {
        data = append(data, s2...)
    }
    return data
}

func main() {
    data := []int{3, 6, 23, 7, 2, 4, 9, 13}
    fmt.Println(QuickSort(data))
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容