上次講了氣泡排序及其優化,可以發現每一次排序的是時候都要交換元素位置好幾次,雖然演算法穩定,但是頻繁交換元素消耗系統資源,效能並不是很佳。是不是還有比氣泡排序快的排序方法呢?當然有,還不止一種,本節將談到其中一種---》選擇排序。
選擇排序的思想:每一次排序找出最小的(或者最大的)元素與此次參與排序的第乙個(或者最後乙個)元素交換位置,直至排序成功。以找正序排序為例:每次尋找只需要比較找出小大元素的索引,然後再跟此次參與排序的第乙個元素交換位置,每次排序只交換一次位置,這樣避免了氣泡排序大量交換元素位置的缺點。
舉例: 5,4,3,2,1
第一次排序: 1,4,3,2,5
第二次排序: 1,2,3,4,5 -----》已正序,雖然已經正序,但是根據選擇排序的特性,無法判斷是否已經正序,所以還得繼續往下迴圈(只迴圈判斷,不用交換元素位置) ---》雖然無效的迴圈判斷浪費了一點效能,但是綜合來講比氣泡排序快
優化後**如下:(正序)
public void selectionsort(int sort)
}if(minsize != i)
}}
雖然優化後選擇排序是比優化後氣泡排序快點,但是它的缺點是演算法不穩定,比如:5,2,5,1,6 第一次交換時第乙個5挪到了第二個5後面了,相同項在排序後的次序被變化了,所以演算法時不穩定的。 選擇排序及其優化
一 原始的選擇排序 選擇排序 selection sort 是一種簡單直觀的 排序演算法 它的工作原理是每一次從待排序的 資料元素 中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。includeusing namespace std void selections...
選擇排序及其優化
選擇排序基礎版 public static int selectsort int array int temp array i array i array index array index temp return array 選擇排序就是在未序的序列中選出乙個最大或最小的值放到已序序列的末尾,當內...
選擇排序及其優化
public void selectionsort int a if minindex i 其中 swap 方法用於交換陣列元素 private void swap int a,int i,int j 一共進行 n 1 輪,每輪都確定乙個最小的數 也可以是最大的 記錄下最小數的索引,最後再和開頭的數...