選擇排序演算法的原理是找到陣列中最小的元素,然后將它和陣列第一個元素交換,接著在剩下的元素中找到最小的元素,接著和陣列第二個元素交換,以此類推,直到將所有元素排序完畢
簡單實作如下:
1 package 選擇排序; 2 3 public class DemoMain { 4 public static void main(String[] args) { 5 Integer[] a = {5, 2, 6, 3, 4, 7}; 6 sort(a); 7 System.out.println(isSorted(a)); 8 show(a); 9 } 10 11 /** 12 * 排序 13 * @param a 排序的陣列 14 */ 15 public static void sort(Comparable[] a) { 16 for (int i = 0; i < a.length - 1; i++) { 17 //獲取當前要交換元素的下標 18 int index = i; 19 //找到最小的元素,將下標賦值給index 20 for (int j = i + 1; j < a.length; j++) { 21 if (less(a[index], a[j])) { 22 index = j; 23 } 24 } 25 //傳遞要交換的元素的下標i和最小值的下標index 26 exch(a, i, index); 27 } 28 } 29 30 /** 31 * 比較大小,v > w的值大于0 32 * 使用compareTo是因為參考型別實作了Comparable介面 33 * @param v 排序方法中傳遞的引數1 34 * @param w 35 * @return 回傳判斷結果 36 */ 37 private static boolean less(Comparable v, Comparable w) { 38 return v.compareTo(w) > 0; 39 } 40 41 42 /** 43 * 交換位置 44 * @param a 陣列 45 * @param i 兩個交換元素的下標 46 * @param j 47 */ 48 private static void exch(Comparable[] a, int i, int j) { 49 Comparable temp; 50 temp = a[i]; 51 a[i] = a[j]; 52 a[j] = temp; 53 } 54 55 /** 56 * 顯示資料 57 * @param a 58 */ 59 private static void show(Comparable[] a) { 60 for (int i = 0; i < a.length; i++) { 61 if (i == a.length - 1) { 62 System.out.print(a[i]); 63 } else { 64 System.out.print(a[i] + ","); 65 } 66 } 67 } 68 69 /** 70 * 簡單的判斷是否排序成功 71 * @param a 排序后的陣列 72 * @return 回傳一個bool值 73 */ 74 private static boolean isSorted(Comparable[] a) { 75 for (int i = 0; i < a.length - 1; i++) { 76 if (less(a[i], a[i + 1])) { 77 return false; 78 } 79 } 80 return true; 81 } 82 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/206918.html
標籤:Java
