Java排序 二 選擇排序

2021-09-10 16:50:14 字數 1420 閱讀 8490

在未排序序列中找到最小元素,放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到已排序序列的末尾,迴圈直到所有元素軍排序完畢。

初始狀態:無序區為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 上述 在在一輪比...