Go之十大經典排序演算法

2022-09-12 04:18:11 字數 2276 閱讀 3302

1.氣泡排序

func bubble_sort(li int) 

}if!exchange

}}

2.選擇排序

func select_sort(li int) 

}li[i], li[pos] =li[pos], li[i]

}}

3.插入排序

func insert_sort(li int) 

li[j+1] =tmp

}}

4.希爾排序

func shell_sort(li int) 

li[j+gap] =tmp}}

}

5.快速排序

func quick_sort(li int, left, right int) 

i :=left

j :=right

rand.seed(time.now().unix())

r := rand.intn(right-left) +left

li[i], li[r] =li[r], li[i]

tmp :=li[i]

for i li[i] =li[j]

for i < j && li[i] <=tmp

li[j] =li[i]

}li[i] =tmp

quick_sort(li, left, i-1)

quick_sort(li, i+1, right)

}

6.堆排序

func sift(li int, low, high int) 

if tmp else

}li[i] =tmp

}func heap_sort(li int)

for j := len(li) - 1; j > 0; j--

}

7.歸併排序

func merge(li int, left, mid, right int) 

for i <= mid && j <=right

else

}if i <=mid

else

for k := 0; k < len(tmp); k++

}func merge_sort(li int, left, right int)

}

8.計數排序

func count_sort(li int) 

}arr := make(int, max_num+1)

for j := 0; j < len(li); j++

k :=0

for m, n :=range arr

}}

9.桶排序

func bin_sort(li int, bin_num int) 

if max_num }

bin :=make(int, bin_num)

for j := 0; j < len(li); j++

bin[n][k+1] =li[j]

}o :=0

for p, q :=range bin

}}

10.基數排序

func radix_sort(li int) 

}for j := 0; j < len(strconv.itoa(max_num)); j++

m :=0

for p := 0; p < len(bin); p++}}

}

11.用堆排解決top_k問題,思路:

a.先取前k個數建小根堆,這樣就能保證堆頂元素是整個堆的最小值;

b.然後遍歷列表的k到最後,如果值比堆頂大,就和堆頂交換,交換完後再對堆建小根堆,這樣就能保證交換完後,堆頂元素仍然是整個堆的最小值;

c.一直遍歷到列表的最後乙個值,這一步做完之後,就保證了整個列表最大的前k個數已經放進了堆裡;

d.按數的大到小出堆;

func sift(li int, low, high int) 

if tmp >li[j]

else

}li[i] =tmp

}func top_k(li int, k int) int

for j := k; j < len(li); j++

}for n := k - 1; n > 0; n--

return

li[:k]

}

十大經典排序演算法

載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...

十大經典排序演算法

不穩定排序種類為4種 快速排序 核心思想是partition操作 二分法分而治之 平均時間複雜度nlogn 希爾排序 高階版的插入排序,先把間隔較遠的子串行排序,最後間隔為1時,等同於插入排序 插入排序在序列有序時,時間複雜度常數級,所以先讓子串行總體有序,能有效降低時間複雜度 平均時間複雜度n 1...

十大經典排序演算法

常見經典排序 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。時間複雜度 空間複雜度 穩...