經典排序之選擇排序(Java)

冬瓜闖世界發表於2020-11-10

基本介紹

選擇式排序也屬於內部排序法,是從欲排序的資料中,按直接的規則選出某一個元素,再依規定交換位置後達到排序的目的。

選擇排序思想

選擇排序(select sorting)也是一種簡單的排序方法。它的基本思想是: 第一次從arr[0]~arr[n-1]中選取最小值,與arr[0]交換,第二次從arr[1] ~arr[n-1]中選取最小值,與arr[1]交換, 第三次從arr[2] ~arr[n-1]中選取最小值,與arr[2] 交換,…
第i次從arr[i-1] ~ arr[n-1]中選取最小值,與arr[i-1]交換,…,第n-1次從arr[n-2] ~arr[n-1]中選取最小值,與arr[n-2]交換,總共通過n-1次,得到一個從小到大的有序序列。

選擇排序思路分析圖:
在這裡插入圖片描述
在這裡插入圖片描述
選擇排序的思路:

  1. 選擇排序一共有陣列大小-1輪排序
  2. 每一輪排序,又是一個迴圈,迴圈的規則(程式碼)
    • 先假定當前這個數是最小數
    • 然後和後面的每個數進行比較,如果發現有比當前數更小的數,就重新確定最小數,並得到下標
    • 當遍歷到陣列的最後時,就得到本輪最小數和下標
    • 交換當前數和最小數的位置。

程式碼實現如下:

public class paixu {
    public static void main(String[] args) {
        //1.定義一個陣列 對它進行排序
        int[] arr = {5,6,9,4,3,8,1,7,11,18,2,5};
        System.out.println("排序前的陣列為");
        System.out.println(Arrays.toString(arr));
        //2.定義一個輔助變數 用來進行比較
        int temp = 0;
        int temp1 = 0;
        int index = 0;// 最小值的下標
        boolean flag = false;
        //3.選擇排序的思路:
        //3.1 外層迴圈為陣列的長度-1 首先使temp = arr[0] 預設為最小值
        //3.2 內層迴圈為陣列的長度-1 用temp變數一個個和陣列中值進行比較,第一次迴圈找出最小值和最小值的下標
        //3.3 內層迴圈結束 將arr[0]和最小值的位置進行更換 這樣最小值就到了第一個位置
        //3.4 第二次外層迴圈 將temp = arr[1] 內層迴圈從陣列的第二個值開始進行比較,因為第一次外層迴圈已經找出了最小值 沒必要在進行比較
        for (int i = 0; i < arr.length-1; i++) {
            temp = arr[i];
            for (int j = i+1; j < arr.length; j++) { //每次內層迴圈從第i個值開始比較
                 if(temp>arr[j]){
                     temp = arr[j];
                     index = j;
                     flag = true;
                 }
            }
            //內層迴圈結束  index就是陣列中最小值的下標
            //更換位置
            if(flag){
                temp1 = arr[i];
                arr[i] = arr[index];
                arr[index] = temp1;
                System.out.println(Arrays.toString(arr));
                flag = false;
            }
        }

        //外層迴圈結束 陣列已經排序完畢
        System.out.println("排序後的陣列為");
        System.out.println(Arrays.toString(arr));
    }
}

相關文章