三向切分快速排序(golang實現(xiàn))

封裝成函數(shù):

//三向切分快速排序
func ThreeWayQuickSort(s []int) {
    sort3way(s, 0, len(s)-1)
}
 
//在lt之前的(lo~lt-1)都小于中間值
//在gt之前的(gt+1~hi)都大于中間值
//在lt~i-1的都等于中間值
//在i~gt的都還不確定(最終i會大于gt,即不確定的將不復存在)
func sort3way(s []int, lo, hi int) {
    if lo >= hi {
        return
    }
    v, lt, i, gt := s[lo], lo, lo+1, hi
    for i <= gt {
        if s[i] < v {
            swap(s, i, lt)
            lt++
            i++
        } else if s[i] > v {
            swap(s, i, gt)
            gt--
        } else {
            i++
        }
    }
    sort3way(s, lo, lt-1)
    sort3way(s, gt+1, hi)
}
 
func swap(s []int, i int, j int) {
    s[i], s[j] = s[j], s[i]
}

測試:

s := []int{9, 0, 6, 5, 8, 2, 1, 7, 4, 3}
fmt.Println(s)
ThreeWayQuickSort(s)
fmt.Println(s)

輸出:
[9 0 6 5 8 2 1 7 4 3]
[0 1 2 3 4 5 6 7 8 9]

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 金山的WPS,相信大家都不陌生。WPS是十足的國產(chǎn)軟件,而求伯君就是開發(fā)這款軟件的巨人。在某個論壇上,有人發(fā)了這么...
    編程獅W3Cschool閱讀 2,967評論 7 3
  • 記得大學那年,早春四月的光景,我從自習室出來,陽光明媚,天空湛藍,天氣回暖,道路積雪雖尚未融化,但也開始顯出消融的...
    PhilipXiong閱讀 224評論 0 0
  • 在ios應用開發(fā)過程中,有時項目需要添加國際化。一般都是公司這邊把翻譯好的多語言execl表格給到開發(fā)人員這邊。按...
    nzbypl閱讀 1,235評論 0 1
  • 我叫江小白,生活很簡單,我的成功不簡單。 突然有一天,一個叫“江小白”的白酒品牌火了。 不管是地鐵里,還是微博、微...
    戴元閱讀 937評論 1 7
  • 今日份的小香課堂是要告訴大家一個好消息?。?! 立秋啦!?。?雖然氣溫還沒降下來,雖然秋雨還沒下起來,雖然工資還沒漲...
    香小妹閱讀 517評論 0 0

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