package main
import (
"fmt"
)func heapsort(arr int)
// 堆頂是最大的了, 取出第乙個放到最後,然後從上往下調整堆
for i := length - 1; i > 0; i--
}// 調整堆
func heap(arr int, i int, last int)
max := left
right := 2*i + 2
// 如果右子樹大, 取右邊的
if right <= last && arr[right] > arr[left]
if arr[i] > arr[max]
//交換, 父節點和兩個子節點中大的交換一下
arr[i], arr[max] = arr[max], arr[i]
// 有調整,那子節點要重新調整一下
heap(arr, max, last)
}// 快排
func qsort(a int)
pivot := a[0]
low, high := 0, n-1
for low < high
a[low] = a[high]
for low < high && a[low] < pivot
a[high] = a[low]
}a[low] = pivot
qsort(a[:low])
qsort(a[low+1:])
}func main()
// 最大堆,按照從小到大的排序
heapsort(arr)
fmt.println(arr)
// 快排
fmt.println("quick sort")
arr2 := int
qsort(arr2)
fmt.println(arr2)
}
演算法 堆排序(go實現)
照舊,老鐵先開始講理論 理論 堆排序,就是根據大頂堆的特性 父節點總是大於子節點,則root節點就是堆中的最大數值,所以只要每次取出root節點,就可以完成排序。so,依然是迴圈排序,迴圈內分兩步走 第一步 將陣列按大頂堆結構排列 第二步 取出堆頂資料 第一步 將剩餘陣列按大頂堆結構排列 第二部 取...
演算法 插入排序(go實現)
插入排序的時間複雜度,正常情況會低於冒泡和選擇,最壞的情況,等於冒泡和選擇 理論部分 插入排序,就是新建立乙個陣列,將舊陣列中的資料,挨個插入到新陣列中,在插入的時候,放在正確的位置。步驟如下 初始化原始陣列sort init 初始化新陣列 reslist 1,從原始陣列的1號位開始取數 將其插入到...
go實現雞尾酒排序演算法
前面我們講解了雞尾酒排序,今天我們來用 實現下 package main import fmt 雞尾酒排序 func cocktailsort thearray int int for j thelen 1 j 0 j if flag return thearray func main fmt.pr...