前言
和冒泡排序一樣,這個也是簡單而必須掌握的基礎排序算法。
原理
遍歷數組每個元素,若爲升序,則尋找最小的數與第一個數交換,一趟排序結束後,最小的數位於數組第一個位置,然後在2-n個數中,尋找最小的元素放在第二個位置,往復下去,排序結束。
時間複雜度
固定:n*n
代碼
public class SelectSort {
//選擇排序
//做N趟排序,每一趟選擇最小的數與前面的交換
//時間複雜度 固定的 n*n
public static void main(String[] args) {
int[] arr={1,3,2,45,65,33,12};
System.out.println("交換之前:");
for(int num:arr){
System.out.print(num+" ");
}
//選擇排序的優化
for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
int k = i;
for(int j = k + 1; j < arr.length; j++){// 選最小的記錄
if(arr[j] < arr[k]){
k = j; //記下目前找到的最小值所在的位置
}
}
//在內層循環結束,也就是找到本輪循環的最小的數以後,再進行交換
if(i != k){ //交換a[i]和a[k]
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
System.out.println();
System.out.println("交換後:");
for(int num:arr){
System.out.print(num+" ");
}
}
}
下一篇:插入排序
入口在此:點我學習插入排序