(一)選擇排序算法
表現最穩定的排序算法之一,由於不管什麼數據進去都是O(n2)的時間複雜度,因此用到它的時候,數據規模越小越好。惟一的好處可能就是不佔用額外的內存空間了吧。數組
選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工做原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而後,再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。以此類推,直到全部元素均排序完畢。app
1.算法描述:ide
(1) 初始狀態:有序區爲空,無序區爲R[1..n];ui
(2) 第i趟排序(i=1,2,3…n-1)開始時,當前有序區和無序區分別爲R[1..i-1]和R(i..n)。該趟排序從當前無序區中-選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R[i+1..n)分別變爲記錄個數增長1個的新有序區和記錄個數減小1個的新無序區;spa
(3) n-1趟結束,數組有序化了。code
2.手動模擬排序:blog
3.算法分析:排序
(1)時間複雜度:平均狀況 O(n2) 最好狀況 O(n^2) 最壞狀況 O(n^2)內存
(2)空間複雜度: O(1)
(3)穩定性:不穩定
(二)代碼體現:
public class SelectionSort { public static void main(String[] args) { int[] arr = {3,4,1,2,7,8,6,5}; Selection(arr);//排序 System.out.println("-----------------------------------------"); print(arr);//打印結果 } private static void Selection(int[] arr) { if(arr == null || arr.length <= 1){ return; } for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; for (int j = i; j < arr.length; j++) { if(arr[j] < arr[minIndex]){ minIndex = j; } } //交換 if(minIndex != i){ int temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; } //打印每一趟排序結果 print(arr); } } public static void print(int[] arr){ StringBuilder sb = new StringBuilder("["); for (int i = 0; i < arr.length; i++) { sb.append(arr[i]); if(i != arr.length - 1){ sb.append(", "); } } System.out.println(sb.append("]")); } }