在未排序序列中找到最小元素,放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到已排序序列的末尾,迴圈直到所有元素軍排序完畢。
初始狀態:無序區為s[1,2,.....,n]
,有序區為空;
第i
趟排序(i = 1,2,3,...,n-1)
開始時,當前有序區和無序區分別為s[1...i-1]
和s[i...n]
。該趟排序從當前無序區中選出最小的記錄s[s]
,將它與無序區的第1
個記錄s[i]
交換,使s[1..i]
和s[i+1..n]
分別變為記錄個數增加1
個的新有序區和記錄個數減少1
個的新無序區;
迴圈n-1
次,排序完成。
public
class
selectionsort
}//找到了無序區最小的元素,將該最小元素與無序區第乙個元素進行交換,然後進行下一輪比較
temp = a[i]
; a[i]
= a[minindex]
; a[minindex]
= temp;}}
//測試
public
static
void
main
(string[
] args)
; system.out.
println
("排序前:");
for(
int i : a)
selectionsort.
selectionsort
(a);
system.out.
println()
; system.out.
println
("排序後:");
for(
int i : a)
}}
選擇排序為兩層for迴圈巢狀,時間複雜度為o(n2),內層迴圈始終去找最小值,放到最前面。交換次數比氣泡排序少很多,所以實際執行效率比氣泡排序快。衍生演算法,雙向選擇排序(每次迴圈,同時選出最大值放在末尾,最小值放在前方),可以提高選擇效率。
選擇排序最好和最壞的情況一樣執行了o(n2),但是選擇排序無疑比氣泡排序更快,因為它進行的交換少得多,當n值較小時,特別是如果交換時間比比較時間大的多時,選擇排序實際上是相當快的。平均時間複雜度也是o(n2)。
演算法是不穩定的,假設a=b
,且a在b前面,而某次迴圈中最小值在b後面,而此最小值需要跟a交換位置,這時候b就在a前面了,所以選擇排序時不穩定的。
看見複雜度為o(1)
,不需要額外的空間。
排序二 選擇排序
定義低位index 0 從低位index遍歷陣列查詢最小元素 將最小元素與低位index元素交換 index加一。若start等於陣列長度則排序結束,否則執行2 來自維基百科 陣列s 9,1,5,3,8,7 第一趟 1,9,5,3,8,7 index 0,min 1 第二趟 1,3,5,9,8,7 ...
Java 選擇排序
public static void selectsort int a int n a.length int minindex 0 從無序區中選乙個最小的數放在有序區的最後,初始時認為整個陣列都是無序的,選乙個最小的數放到第一位 for int i 0 i 直接選擇排序和插入排序類似,都將資料分為有...
選擇排序 JAVA
選擇排序原理 每次選定乙個位置的數,依此和後續位置的數比較,如果選定的數大於後面的數,則交換 第一次選擇出最小值,第二次從第二個位置開始比 共比較n 1輪,每輪比較n i 1次 int a new int for int times 0 times a.length 1 times 上述 在在一輪比...