八大排序算法——選擇排序(動圖演示 思路分析 實例代碼Java 復雜度分析)


一、動圖演示

 

 

二、思路分析

1.  第一個跟后面的所有數相比,如果小於(或小於)第一個數的時候,暫存較小數的下標,第一趟結束后,將第一個數,與暫存的那個最小數進行交換,第一個數就是最小(或最大的數)

2.  下標移到第二位,第二個數跟后面的所有數相比,一趟下來,確定第二小(或第二大)的數

重復以上步驟

直到指針移到倒數第二位,確定倒數第二小(或倒數第二大)的數,那么最后一位也就確定了,排序完成。

 

三、負雜度分析

1.  不管原始數組是否有序,時間復雜度都是O(n2

因為沒一個數都要與其他數比較一次,(n-1)2次,分解:n2-2n+1,  去掉低次冪和常數,剩下n2,所以最后的時間復雜度是n2

2.  空間復雜度是O(1),因為只定義了兩個輔助變量,與n的大小無關,所以空間復雜度為O(1)

 

 四、Java 代碼如下:

 

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] n = new int[]{1,6,3,8,33,27,66,9,7,88};
        int temp,index = -1;
        for (int i = 0; i < n.length-1; i++) {
            index=i;
            //如果大於,暫存較小的數的下標
            for (int j = i+1; j <n.length; j++) {
                if(n[index]>n[j]){
                    index = j;
                }
            }
            ////將一趟下來求出的最小數,與這個數交換
            if(index>0){
                temp = n[i];
                n[i] = n[index];
                n[index] = temp;
            }
            System.out.println(Arrays.toString(n));
        }
        System.out.println(Arrays.toString(n));
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM