一、冒泡排序
//冒泡
func Bubblesort(arry []int)[]int{
if arry == nil{
return nil
}
for i:=0;i<len(arry)-1;i++{
for j:=0;j<len(arry)-i-1;j++{
if arry[j]>arry[j+1]{
arry[j],arry[j+1]=arry[j+1],arry[j]
}
}
}
return arry
}
二、插入排序
//插入
func Insertsort(arr []int)[]int{
if arr == nil {
return nil
}
var j int
for i:=1;i<len(arr);i++{
tmp:=arr[i]
for j=i;j>0;j--{
if(tmp < arr[j-1]){
arr[j] = arr[j-1]
} else{
break
}
}
arr[j]=tmp
}
return arr
}
三、兩個有序數組的歸併排序
//兩個有序數組的歸併
func Merge(arrs1, arrs2 []int) []int {
if arrs2 == nil && arrs1 == nil{
return nil
}
if arrs1 == nil{
return arrs2
}
if arrs2 == nil{
return arrs1
}
var result []int //保存歸併後的數組
leftLen := len(arrs1) //arrs1得長度
rightLen := len(arrs2) //arrs2得長度
lp := 0
rp := 0
for lp < leftLen && rp < rightLen{
if arrs1[lp] > arrs2[rp]{
result = append(result, arrs2[rp])
rp++
continue
}
result = append(result, arrs1[lp])
lp++
}
result = append(result, arrs1[lp:]...) //處理兩個數組不等長的情況
result = append(result, arrs2[rp:]...)
fmt.Println(result)
return result
}
四、快速排序
//快速排序
func partion(arr []int,low ,high int)int{
val:=arr[low]
for low<high{
for low<high && arr[high] >= val{
high--
}
arr[low]=arr[high]
for low<high && arr[low] <= val{
low++
}
arr[high]=arr[low]
}
arr[low]=val
return low
}
func Quicksort(arr []int,low,high int)[]int {
par:=partion(arr,low,high)
if low<par-1{
Quicksort(arr,low,par-1)
}
if high>par+1{
Quicksort(arr,par+1,high)
}
return arr
}
五、選擇排序
//選擇排序
func Selectsort(arr []int)[]int{
if arr==nil{
return nil
}
var min int //保存最小值的下標
for i:=0;i<len(arr)-1;i++{ //趟數
min = i
for j:=i+1;j<len(arr);j++{
if arr[j]<arr[min]{
min=j
}
}
if min!=i{
arr[min],arr[i]=arr[i],arr[min]
}
}
return arr
}