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表示本次迴圈發生了交換,需要繼續判...