GO 實現快速排序

littlexiaoshuishui發表於2020-06-11

快速排序是原地排序,就是在s陣列中不斷交換位置。
也是分治思想,選中一個標尺,比如第一個元素。然後把其他元素依次和他比較。

func main() {
   s := []int{6,3,2,62,4,51}
   qSort(s)
   fmt.Println(s)
}
func qSort(s []int){
    len := len(s)
    if len < 2 {
        return
    }
    head,trip := 0, len-1
    value := s[head]
    for head < trip { //s[head]就是我們的標尺,
        if s[head+1] > value { //標尺元素遇到大於它的,就把這個元素丟到最右邊trip
            s[head+1],s[trip] = s[trip],s[head+1]
            trip--
        }else{ //標尺元素遇到小於它的,就換位置,標尺右移動一位。
            s[head],s[head+1] = s[head+1],s[head]
            head++
        }
    }
    //進過上面的處理,保證了標尺左邊的元素都小於等於標尺元素(s[head]),右邊的元素大於等於標尺元素。
    qSort(s[:head])
    qSort(s[head+1:])
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章