GO 語言常用排序

2022-05-16 06:41:22 字數 2549 閱讀 9448

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 main

import "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 ...