1. 程式人生 > >java_之排序--選擇排序

java_之排序--選擇排序

今天心情稍微有點兒不好,沒關係,寫程式碼吧,轉移注意力。

1.選擇排序:

在一組待排序的數當中,去選擇待排序的數當中,數最小的那個數,然後將整個數放在第一個位置,然後在剩下的待排序的數當中,去選擇數值最小的數然後放到第二個數的位置,依次進行排序比較,直到倒數第二小的數和最大的數進行比較位置。實現的詳細程式碼如下:

package 排序;

public class choice {
    /**
     * 選擇排序演算法,在未排序序列中找到最小的元素,存放到排序序列的起始位置
     *
     * 再從剩餘未排序序列中繼續尋找最小的元素,然後放到排序序列末尾
     *
     * 以此類推,直到所有元素均排序完畢。
     * @param args
     */
    public static void  choice(int[] numbers){
        int size=numbers.length;//陣列長度
        int temp=0;//中間變數
        for(int i=0;i<size;i++){
            int k=i;//將i的數值賦值給k
            for(int j=size-1;j>i;j--){//將長度減一個數和最小值進行比較
                if(numbers[j]<numbers[k]){
                    k=j;//k一開始的值是0,當數值比較為較小時,把下標較大的哪個數值換到下標較小的數值的位置上
                }
            }
            //交換兩個數
            temp=numbers[i];
            numbers[i]=numbers[k];
            numbers[k]=temp;
        }
    }

    public static void main(String[] args){
        int[] a={52,68,59,57,23,44};
        System.out.println("排序前");
        out(a);
        System.out.println("");
        System.out.println("選擇排序後");
        choice(a);
        out(a);
    }

    public static void out(int[] a){
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+",");
        }
    }
}

可通過IDE的debug模式去熟悉排序演算法的具體資料走向。

資料排序過程如下:

1.第一輪進行比較:

這裡比較是第一個數依次和每個數進行比較,直到將數值最小的哪個數篩選出來位置

之後函式執行情況如下:

至此,最小的數被換到了陣列下標最小的位置上:

在for迴圈體內部,進行第二輪比較,從除了第一個數的之外的所有數進行排序,

第二輪排序如下:

剛開始的排序順序如上:

將44換到倒數第二的位置,至此,第二輪比較結束:

第三輪比較的數值交換位置至此第三輪結束。

選擇排序遍歷所有數先查到數值最小的數,然後,將其位置定下來,再進行接下來的排序,但是每次以遍歷的時間複雜度會增高。

從i=2,也就是陣列的第三個位置進行比較

將第三輪查到的最小數與上一輪所在的陣列下標