1. 程式人生 > >Java中陣列的選擇排序,選擇排序優化

Java中陣列的選擇排序,選擇排序優化

選擇排序:

思路:

 int arr[]= {5,6,2,4,3,1}; //這個"[]“放在arr後面也是可以的,和C語言一樣

在這裡插入圖片描述

第一輪
流程:

第一輪比較

  if(arr[0]>arr[1]){  //這裡 5不大於6,什麼都不做
       int temp = arr[0];
           arr[0] = arr[1];
           arr[1] = temp;
  }
     if(arr[1]>arr[2]){  //這裡 5大於2,交換元素
       int temp = arr[0];
           arr[0] = arr[1];
           arr[1] = temp;
  }
  
  此時陣列變為  {2,6,5,4,3,1}
  
     if(arr[2]>arr[3]){  //這裡 5大於4,交換元素
       int temp = arr[0];
           arr[0] = arr[1];
           arr[1] = temp;
  }
  ........

第二輪比較

 // 此時陣列為{1,6,5,4,3,2}
 
if(arr[1]>arr[2]){  //第一輪比較後,arr[0]為最小值已經確定,直接從arr[1]開始比
       int temp = arr[0];
           arr[0] = arr[1];
           arr[1] = temp;
  }
  .......
  我這裡犯懶直接省略了,我先要自己複習一遍,理解後表達出來,
  最騷的是我還得排版 /(ㄒoㄒ)/~~

在這裡插入圖片描述

程式碼

    public static void selectionSort() {
        //選擇排序
int[] arr = {5, 6, 2, 4, 3, 1}; for (int i = 0; i < arr.length - 1; i++) { //外層選中的元素 for (int j = i + 1; j < arr.length; j++) { //內層從i後依次取出元素與i比較 if (arr[i] > arr[j]) { int temp = arr[j]; arr[j] = arr[i]; arr[
i] = temp; } } } System.out.println(Arrays.toString(arr)); }

優化:

   public static void selectionSort2() {
        //選擇排序
        int[] arr = {5, 6, 2, 4, 3, 1};

        for (int i = 0; i < arr.length - 1; i++) {  //外層共需比較n-1輪

            int flag = i;                           //新增的程式碼,記錄選中元素的位置

            for (int j = flag + 1; j < arr.length; j++) { //內層每次從flag後依次取出元素與i比較,這裡要將flag替換i,這樣才能保證
                if (arr[flag] > arr[j]) {                 //拿到最小值
                   flag = j;
                }
            }
            if(flag !=i){                        //和上篇的冒泡優化原理相同,減少交換次數
                int temp = arr[flag];
                arr[flag] = arr[i];
                arr[i] = temp;
            }
        }

        System.out.println(Arrays.toString(arr));
        
        /**
         * tip:建議打個斷點Debug一下,跟著流程走一遍就能很好的理解了
         */
    }