快速排序

快速排序

算法

  1. 初始化基準值遊標,首尾遊標,首遊標爲第二個元素
  2. 首遊標與基準值比較,大於時尾遊標和首遊標交換,尾遊標向前移動。
  3. 小於則首遊標與基準值交換,首遊標和基準值遊標向後移動。
  4. 重複2和3步,直到首遊標遇到尾遊標(注意有等號)。
  5. 將基準值左邊數組和右邊數組遞歸快排。

go實現

func quickSort(arr []int) {
	if len(arr) <= 1 {
		return
	}
	//初始化首尾遊標,
	first, end := 1, len(arr)-1

	//基準值遊標
	mid := 0
	//首遊標遇到尾遊標,注意有等號
	for first <= end {
		//首遊標和基準值比較,大於情況
		if arr[first] > arr[mid] {
			arr[first], arr[end] = arr[end], arr[first]
			//尾遊標移動
			end--
		} else {	//小於情況
			arr[first], arr[mid] = arr[mid], arr[first]
			//首遊標和基準值遊標右移
			first++
			mid++
		}
	}
	//將基準值左邊數組和右邊數組遞歸快排
	quickSort(arr[:mid])
	quickSort(arr[mid+1:])
}

輸出結果

origin: [2 7 3 6 4 1 5 0]
[2 7 3 6 4 1 5 0]
[2 0 3 6 4 1 5 7]
[0 2 3 6 4 1 5 7]
[0 2 5 6 4 1 3 7]
[0 2 1 6 4 5 3 7]
[0 1 2 6 4 5 3 7]
[0 1 2 4 6 5 3 7]
[0 1 2 4 6 5 3 7]
值 2 確定位置在下標: 2
[0 1]
[0 1]
值 0 確定位置在下標: 0
[4 6 5 3 7]
[4 7 5 3 6]
[4 3 5 7 6]
[3 4 5 7 6]
[3 4 5 7 6]
值 4 確定位置在下標: 1
[5 7 6]
[5 6 7]
[5 6 7]
值 5 確定位置在下標: 0
[6 7]
[6 7]
值 6 確定位置在下標: 0
quick sort: [0 1 2 3 4 5 6 7]
發佈了322 篇原創文章 · 獲贊 163 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章