快速排序是原地排序,就是在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 協議》,轉載必須註明作者和本文連結