2. 基礎排序算法——選擇排序(golang)


選擇排序

和冒泡排序相比,選擇排序先是通過和比較,從而找到最小值的索引,最後進行交換。

重複上述過程,最後便能得到有序的數組。



代碼實現

func SelectSort(arr []int) []int {

	// 數組長度
	length := len(arr)

	// 數組爲空或者只有一個元素
	if length <= 1 {
		return arr
	}

	// 遍歷,比較
	for i := 0; i < length-1; i++ {

		// 標記索引
		min := i

		// 找到最小值的索引
		for j := i + 1; j < length; j++ {
			if arr[min] > arr[j] {
				min = j
			}
		}

		// 當i不是最小值的索引時,進行交換
		if i != min {
			arr[i], arr[min] = arr[min], arr[i]
		}
	}
	return arr
}



時間複雜度

無論最好還是最壞的情況,時間複雜度都是O(n^2)。

儘管與冒泡排序同爲O(n^2),但選擇排序的性能還是要由於冒泡排序。



穩定性

選擇排序是一個不穩定排序算法

選擇排序是給每個位置選擇當前元素最小的,比如給第一個位置選擇最小的,在剩餘元素裏面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因爲只剩下它一個最大的元素了。那麼,在一趟選擇,如果一個元素比當前元素小,而該小的元素又出現在一個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是一個不穩定的排序算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章