排序演算法的GO語言實現

2022-05-17 16:29:24 字數 1481 閱讀 1919

func bubblesort(arr int,arrlength int)

} if !flag

}}

把數字插入到合適的位置

package algo

import "testing"

/**第乙個數字是有序的,從後面的數字取乙個出來,放在有序範圍內

*/func insertionsort(arr int,arrlength int)

for i:=1; i=0;j--else

} //把數字放在挪動出來的空位,j+1是為了補償j--

arr[j+1] = value

}}

每次選擇後面最小的數字放到有序區

//在無序區選擇乙個最小的數字放在有序區後面

func selectsort(arr int,arrlength int)

func quicksortinner(arr int,left int,right int)

q := partition(arr,left,right) //分割槽,並返回兩個區中間數的索引

partition(arr,left,q-1) //對小數區[left,q-1]分割槽

partition(arr,right,q+1)//對大數區分區

}func partition(arr int,left int,right int) int

//把陣列分成兩半,分別對兩半進行拆分

middle := start + (end - start) / 2

mergersort(arr,start,middle)

mergersort(arr,middle+1,end)

//拆分完後對兩半進行合併操作

merge(arr,start,middle,end)

}//對兩個有序陣列進行合併操作,i是起點到中間點,j是中間點+1到終點

func merge(arr int,start int, middle int, end int)else

} //把i陣列未迴圈完的元素放入臨時變數

for ;i<=middle;i++

//把j陣列未迴圈完的元素放入臨時變數

for ;j<=end;j++

//把新陣列的元素放回原陣列,原陣列需要從起點start偏移

for i=0; i< len(tmparr); i++

}

場景:有序資料

注意點:

func bsearch(arr int,value int) intelse if(value > arr[mid])else

} return -1

}

func bsearch(arr int,value int) intelse

}else

} return -1

}

Go語言實現 常見排序演算法

氣泡排序 時間複雜度 o n 2 穩定性 穩定 氣泡排序 相鄰兩位交換,12交換,23交換,34交換,把最大的數放到最右邊 利用flag標記可以避免無效迴圈 func bubblesort arr int true表示序列已經有序,直接退出,不用繼續迴圈 false表示本次迴圈發生了交換,需要繼續判...

演算法 選擇排序(go語言實現)

選擇排序與氣泡排序的時間複雜度相同。因為一直在選擇最小的數字,所以叫選擇排序 理論部分 1,將設陣列0號位為陣列最小值,將其定義為minnum 此時 minnum 5 2,遍歷陣列,將每一項和 minnum 對比,如果小於minnum,則將其與第一項調換位置 並重新賦值 minnum 變換為此時 m...

Go語言實現 常見排序演算法

氣泡排序 時間複雜度 o n 2 穩定性 穩定 氣泡排序 相鄰兩位交換,12交換,23交換,34交換,把最大的數放到最右邊 利用flag標記可以避免無效迴圈 func bubblesort arr int true表示序列已經有序,直接退出,不用繼續迴圈 false表示本次迴圈發生了交換,需要繼續判...