1. 氣泡排序(bubble sort)的基本思想:比較相鄰兩個 元素的關鍵字值,如果反序,則交換
func bubblesort(arr int)} //判斷資料是否是有序
if !flag else
}}
2. 快速排序
快速排序(quick sort)是一種分割槽交換排序演算法.
它的基本思想:在資料序列中選擇乙個值作為比較的基準值, 每趟從資料序列的兩端開始交替進行,將小於基準值的元素交換到序列前端,將大於基準值的元素交換到序列後端, 介於兩者之間的位置則成為基準值的最終位置。
func quicksort(arr int, left int, right int)//獲取基準值合適下標
if j > index
//從左面找比基準值大的資料
for i <= index && arr[i] <= temp
//獲取基準值合適下標
if i <= index
} //將基準值放在合適位置
arr[index] = temp
//遞迴呼叫 分步處理資料
if index-left > 1
if right-index > 1
}
3. 直接選擇排序
直接選擇排序(straight select sort)的基本思想:第一趟從n個元素的資料序列中選出關鍵字最小(或最大)的元素並放到最前(或最後)位置,下一趟再從n-1個元素中選出最小(大)的元素並放到次前(後)位置,以此類推,經過n-1趟完成排序。
func selectsort(arr int)} //交換資料
arr[index], arr[len(arr)-1-i] = arr[len(arr)-1-i], arr[index]
}}
4.堆排序
堆排序(heap sort)是完全二叉樹的應用,它的基本思想:將資料序列「堆」成樹狀,每趟只遍歷樹中的一條路徑。
//初始化堆func heapinit(arr int)
//根節點儲存最大值
for i := length - 1; i > 0; i--
//將根節點和葉子節點資料交換
arr[0], arr[i] = arr[i], arr[0]
heapsort(arr, 0, i-1) }}
//獲取堆中最大值 放在根節點
func heapsort(arr int, startnode int, maxnode int)
//左右比較 找到最大值
if rchild <= maxnode && arr[rchild] > arr[lchild] else
//和跟節點比較
if arr[max] <= arr[startnode]
//交換資料
arr[startnode], arr[max] = arr[max], arr[startnode]
//遞迴進行下次比較
heapsort(arr, max, maxnode)
}
5. 插入排序
func insertsort(arr int)arr[j+1] = temp
} }}
6. 希爾排序
希爾排序(shell sort)又稱縮小增量排序,它的基本思想:分組的直接插入排序。
func shellsort(arr int) else}} }
}
7. 二分查詢 binarysearch(資料,元素) 返回值為下標
package mainimport "fmt"
func binarysearch(arr int, num int) int else if num > arr[mid] else
//再次設定中間基準值位置
mid = (start + end) / 2
} return -1
}func main()
num := 666
index := binarysearch(arr, num)
fmt.println(index)
}
8. 變相排序
變相排序 基於大量重複 在某乙個範圍內
func main02()fmt.println(s)
//統計資料集合中資料出現的次數
m := make(map[int]int)
for i := 0; i < len(s); i++
//排序
for i := 0; i < 1000; i++
}}
Go語言排序
1 氣泡排序 氣泡排序中,包含著乙個具體的演算法實現原檔案和乙個測試檔案 bubblesort.go package bubblesort func bubblesort values int end if end for j if flag true end for i bubble test.g...
Go語言 堆排序
1 前言 在了解堆排序之前,需要知道堆的一些特徵,那就是堆就是乙個完全二叉樹,所以需要了解完全二叉樹的特點 完全二叉樹的特點 1 葉子節點只能在最大的兩層出現 2 如果i 1,結點就是根結點,如果i 1,則其雙親parent i i 2 3 如果2i n,則結點無左孩子,如果2i 1 n,則結點無右...
go語言常用操作
package main import fmt func main if else ifelse forgoto 轉移到被標記的語句 len 長度 cap 容量a 3 int var b int a 1 4 前閉後開 陣列切片 陣列操作方法 copykay value型別 a map string ...