1、動圖演示java
2、思路分析數組
1. 第一個跟後面的全部數相比,若是小於(或小於)第一個數的時候,暫存較小數的下標,第一趟結束後,將第一個數,與暫存的那個最小數進行交換,第一個數就是最小(或最大的數)spa
2. 下標移到第二位,第二個數跟後面的全部數相比,一趟下來,肯定第二小(或第二大)的數指針
重複以上步驟code
直到指針移到倒數第二位,肯定倒數第二小(或倒數第二大)的數,那麼最後一位也就肯定了,排序完成。blog
3、負雜度分析排序
1. 無論原始數組是否有序,時間複雜度都是O(n2),class
由於沒一個數都要與其餘數比較一次,(n-1)2次,分解:n2-2n+1, 去掉低次冪和常數,剩下n2,因此最後的時間複雜度是n2import
2. 空間複雜度是O(1),由於只定義了兩個輔助變量,與n的大小無關,因此空間複雜度爲O(1)變量
4、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)); } }