福哥答案2020-06-08:
golang**如下:
package test20_mergersort敲go test -v -test.run testmergersort結果如下:import (
"fmt"
"testing")
//go test -v -test.run testmergersort
func testmergersort(t *testing.t)
fmt.println(arr)
mergersort_mycode(arr, 0, len(arr))
fmt.println(arr)
}fmt.println("-----------------")
if true
fmt.println(arr)
mergersort_copycode(arr, 0, len(arr))
fmt.println(arr)
}} // mergersort_mycode自己寫的** 步驟:1.判斷長度是否大於1;2.取中值;3.遞迴排序兩個;4.迴圈左陣列,如果逆序,交換並氣泡排序右陣列一次。
func mergersort_mycode(arr int, left, right int)
mid := left + (right-left)>>1 //取中值不會溢位
mergersort_mycode(arr, left, mid) //左排序
mergersort_mycode(arr, mid, right) //右排序
for i := left; i < mid; i++ else }}
}} // mergersort_copycode網上覆制的**
func mergersort_copycode(arr int, left, right int)
//c := (a + b) / 2 //取中值可能溢位
mid := left + (right-left)>>1 //取中值不會溢位
mergersort_copycode(arr, left, mid) //左排序
mergersort_copycode(arr, mid, right) //右排序
arrleft := make(int, mid-left)
arrright := make(int, right-mid)
copy(arrleft, arr[left:mid]) //複製陣列左邊
copy(arrright, arr[mid:right]) //複製陣列右邊
i := 0
j := 0
for k := left; k < right; k++ else if j >= right-mid else if arrleft[i] <= arrright[j] else }}
手寫堆排序和歸併排序
手動實現堆排序,使用大根堆實現 從小到大排序 完成在陣列 low,high 的範圍內,對在位置low上的節點向下進行調整 void shift int nums,int low,int high else break nums i tmp void heap sort int nums,int n ...
Syins寫的歸併排序
歸併排序使用了分治思想 對乙個陣列排序,先將陣列分成左邊和右邊兩個子塊,然後繼續分子塊到乙個子塊只包含乙個數再返回 voidst int a,int lo,int hi 再通過mg函式將子塊有序合併,這裡採用的是有序數列的合併思想 voidmg int a,int lo,int mi,int hi ...
c語言寫歸併排序
歸併排序,在實際開發中,很少用,但是為什麼一定要掌握它,甚至在面試中經常會問到。其實,只是為了更好的理解演算法。歸併排序最核心的就是分治策略,所謂分治,就是把乙個問題,拆分成若干個小問題然後求解。掌握歸併排序以後,在遇到更複雜的問題,我們可以考慮分治策略。歸併排序是穩定的,時間複雜度是o nlogn...