一、動圖演示
二、思路分析
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)); } }