java_之排序--選擇排序
阿新 • • 發佈:2018-11-08
今天心情稍微有點兒不好,沒關係,寫程式碼吧,轉移注意力。
1.選擇排序:
在一組待排序的數當中,去選擇待排序的數當中,數最小的那個數,然後將整個數放在第一個位置,然後在剩下的待排序的數當中,去選擇數值最小的數然後放到第二個數的位置,依次進行排序比較,直到倒數第二小的數和最大的數進行比較位置。實現的詳細程式碼如下:
package 排序; public class choice { /** * 選擇排序演算法,在未排序序列中找到最小的元素,存放到排序序列的起始位置 * * 再從剩餘未排序序列中繼續尋找最小的元素,然後放到排序序列末尾 * * 以此類推,直到所有元素均排序完畢。 * @param args */ public static void choice(int[] numbers){ int size=numbers.length;//陣列長度 int temp=0;//中間變數 for(int i=0;i<size;i++){ int k=i;//將i的數值賦值給k for(int j=size-1;j>i;j--){//將長度減一個數和最小值進行比較 if(numbers[j]<numbers[k]){ k=j;//k一開始的值是0,當數值比較為較小時,把下標較大的哪個數值換到下標較小的數值的位置上 } } //交換兩個數 temp=numbers[i]; numbers[i]=numbers[k]; numbers[k]=temp; } } public static void main(String[] args){ int[] a={52,68,59,57,23,44}; System.out.println("排序前"); out(a); System.out.println(""); System.out.println("選擇排序後"); choice(a); out(a); } public static void out(int[] a){ for(int i=0;i<a.length;i++){ System.out.print(a[i]+","); } } }
可通過IDE的debug模式去熟悉排序演算法的具體資料走向。
資料排序過程如下:
1.第一輪進行比較:
這裡比較是第一個數依次和每個數進行比較,直到將數值最小的哪個數篩選出來位置
之後函式執行情況如下:
至此,最小的數被換到了陣列下標最小的位置上:
在for迴圈體內部,進行第二輪比較,從除了第一個數的之外的所有數進行排序,
第二輪排序如下:
剛開始的排序順序如上:
將44換到倒數第二的位置,至此,第二輪比較結束:
第三輪比較的數值交換位置至此第三輪結束。
選擇排序遍歷所有數先查到數值最小的數,然後,將其位置定下來,再進行接下來的排序,但是每次以遍歷的時間複雜度會增高。
從i=2,也就是陣列的第三個位置進行比較
將第三輪查到的最小數與上一輪所在的陣列下標