簡單選擇排序法就是通過n-i次關鍵字比較,找到最小的關鍵字下標,最後在替換n-i下標和最小下標的值。
簡單排序的思想和氣泡排序的思想的區別是氣泡排序是相鄰關鍵字兩兩比較,如果小,則直接替換,可能在一輪迴圈會進行多次值交換。而簡單選擇排序法是一輪迴圈找到最小關鍵字下標,最後進行最多一次替換。
public
static
void
******selectionsort
(integer[
] arr)}if
(min != i)
}}
假設需要對關鍵字序列使用簡單選擇排序,如下圖:
如上面圖的流程所示,當i=0,j=1,min=0時,進行比較[min]>[j],所以min=1。當j=3時,[min]>[j],所以min=3。當j=7時,[min]>[j],所以min=7。最後替換min下標和i下標的值,也就是把找到的最小關鍵字和第一位替換。同理,然後進行下乙個最小關鍵字的輪詢比較替換。
最好的情況和最差情況比較次數相同。第i趟排序需要進行n-i次比較,總共需要比較n(n
−1)2
\frac
2n(n−1
)次。對於交換來說,最好情況,不需要交換。最差情況也就是逆序時,需要交換n-1次。
最終的時間複雜度為o(n2n^
n2)。前面有說氣泡排序一輪比較大小可能會多次大小值替換,而簡單選擇排序每次輪詢只需要進行最多一次值替換。接下來我們就來看下序列長度為10萬個隨機數,分別用冒泡和簡單選擇兩種演算法執行時間需要多久。
public
static
void
main
(string[
] args)
integer[
] newarrays = arrays.
copyof
(arrs, arrs.length)
;long start = system.
currenttimemillis()
;******selectionsort
(newarrays)
;long end = system.
currenttimemillis()
; system.out.
println(+
(end-start)
+"ms");
newarrays = arrays.
copyof
(arrs, arrs.length)
; start = system.
currenttimemillis()
;bubblesort
(newarrays)
; end = system.
currenttimemillis()
; system.out.
println(+
(end-start)
+"ms");
}public
static
void
******selectionsort
(integer[
] arr)}if
(min != i)}}
public
static
void
bubblesort
(integer[
] arr)}}
}
最終得到的結果如下:
簡單選擇排序執行時間:
7455ms
氣泡排序執行時間:
28337ms
我們發現當數量比較大的無序序列進行排序時,簡單選擇排序相較於氣泡排序省去了大量的值替換操作,所以耗時比冒泡要少的多。所以,我們得出的結論是簡單選擇排序比氣泡排序的效能要優。 排序演算法 選擇排序 簡單選擇排序
package 選擇排序 簡單選擇排序 不穩定 基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。public class 簡單選擇排序 system.out.println 排序之前 f...
排序演算法 簡單選擇排序
簡單選擇排序是一種選擇排序。1.簡單選擇排序的定義 每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。2.簡單選擇排序的流程 例項 注 紅色數字是位置發生變化的數值。3.簡單選擇排序的 實現 public class selectsort 若min有變化,...
排序 簡單選擇排序演算法
排序分析 待排陣列 arr 9 排後陣列 newarr 9 第一輪 算出newarr 0 該放哪個元素。把arr某個元素放到newarr 0 arr減去該元素。arr剩下元素依次與newarr 0 對比,誰小誰排newarr 0 結果 arr newarr 1 第二輪 算出newarr 1 該放哪個...