標籤:size string system pac 描述 索引 class 自己 演算法
我一定要掌握一些基本的排序演算法,對,沒錯,說到做到,今天學習了選擇排序演算法。
一、演算法描述
首先找到數組中的最小的那個元素,把它和數組的第一個元素位置交換(如果第一個元素是最小元素那麼它就和自己交換)。在剩下的元素中找到最小的元素,將它和第二個元素交換位置,如此重複,正道將整個元素排序完成,這種叫做選擇排序,就是不斷地徐澤剩下元素中的最小者。
舉個栗子:
原數組:5, 2 , 9 , 6 , 3(第一趟選擇最小數進行交換)
第一趟:2, 5 , 9 , 6 , 3
第二趟:2, 3 , 9 , 6 , 5
第三趟:2, 3 , 5 , 6 , 9
第四趟:2, 3 , 5 , 6 , 9
二、演算法複雜度分析
平均時間複雜度:O(n^2)
空間複雜度:O(1)(用於交換和記錄索引)
穩定性:不穩定(如[5 , 5 , 3]第一趟將5和3交換,倒置第一個5挪到第二個5後面)
三、演算法實現(NO BB Show Your Code)
1 package cn.zpoor.Test; 2 /** 3 * @author 薛定諤的貓 4 * 選擇排序實現*/ 5 public class Selection { 6 public static void main(String[] args) { 7 int[] arr = {5,2,9,6,3}; 8 System.out.println("選擇排序之前:"); 9 for(int num:arr) {10 System.out.print(num+ " ");11 }12 13 //選擇排序的最佳化14 for(int i = 0;i<arr.length-1;i++) {15 int k = i;//記錄值16 for(int j = k+1;j<arr.length;j++) {//選最小的索引值17 if (arr[j]<arr[k]) {18 k = j;//記錄找到的最小值的索引值19 }20 }21 //內層迴圈結束後,找到本輪最小的數之後,進行交換22 if (i!=k) {23 //交換位置24 int temp = arr[i];25 arr[i] = arr[k];26 arr[k] = temp;27 }28 }29 System.out.println();30 System.out.println("選擇排序之後:");31 for(int num:arr) {32 System.out.print(num + " ");33 }34 }35 }36 /*37 選擇排序之前:38 5 2 9 6 3 39 選擇排序之後:40 2 3 5 6 9 */
睡覺。
Java-選擇排序演算法