go實(shí)現(xiàn)快速排序

第一,單線程實(shí)現(xiàn)快速排序

package main

import (
   "fmt"
  )

func main(){
    array := []int{3, 6, 1, 4, 2, 8}
    fmt.Println(array)
    quickSort(array, 0, len(array)-1)
    fmt.Println(array)
}

func quickSort(array []int, left, right int) {
    if left >= right {
        return
    }
    index := partition(array,left,right)
    quickSort(array, left, index - 1)
    quickSort(array, index + 1, right)
}

func partition(array []int, left, right int) int {
    baseNum := array[left]
    for left < right{
        for (array[right] >= baseNum && right > left){
            right--
        }
        array[left] = array[right]
        for (array[left] <=baseNum && right > left) {
            left++
        }
        array[right] = array[left]
    }
    array[right] = baseNum
    return right
}

第二,多線程實(shí)現(xiàn)快速排序

package main
import (
   "fmt"
)
func main() {
    array := []int{3, 1, 4, 1, 5, 9, 2, 6}
    ch := make(chan int)
    go quickSort(array, ch)
    for value := range ch {
        fmt.Println(value)
    }
}
func quickSort(array []int, ch chan int) {
    if len(array) == 1 {
        ch <- array[0]
        close(ch)
        return
    }
    if len(array) == 0 {
        close(ch)
        return
    }
    small := make([]int, 0)
    big := make([]int, 0)
    left := array[0]
    array = array[1:]
    for _, num := range array {
        switch {
        case num <= left :
            small = append(small, num)
        case num > left :
            big = append(big, num)
        }
    }
    left_ch := make(chan int, len(small))
    right_ch := make(chan int, len(big))
    
    go quickSort(small, left_ch)
    go quickSort(big, right_ch)
    
    //合并數(shù)據(jù)
    for i := range left_ch {
        ch <- i
    }
    ch<-left
    for i := range right_ch {
        ch <- i
    }
    close(ch)
    return
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,869評(píng)論 11 349
  • Java SE 基礎(chǔ): 封裝、繼承、多態(tài) 封裝: 概念:就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體,并盡...
    Jayden_Cao閱讀 2,259評(píng)論 0 8
  • 一個(gè)簡(jiǎn)單的單例示例 單例模式可能是大家經(jīng)常接觸和使用的一個(gè)設(shè)計(jì)模式,你可能會(huì)這么寫 publicclassUnsa...
    Martin說閱讀 2,402評(píng)論 0 6
  • 大雪已經(jīng)開始結(jié)冰, 北風(fēng)拉著長(zhǎng)音咆哮著, 陽光穿過一切,鋪滿我的笑臉
    天空里放夢(mèng)閱讀 297評(píng)論 0 0
  • 如果按農(nóng)耕的經(jīng)驗(yàn)來講,我的簡(jiǎn)書已經(jīng)雜草叢生的荒地,顆粒無收。 從7月份更新了最后一篇讀書筆記之后,就再?zèng)]為自己寫下...
    tagore0624閱讀 294評(píng)論 1 0

友情鏈接更多精彩內(nèi)容