數據結構排序算法——簡單選擇排序

簡單選擇排序

從待排序的數列中選擇一個最小的數,放到有序數列的最後一位,最始的有序數列就是無序數列的第一個數,就相當於用數列的第一個元素分別與其它元素比較,選出最小數的下標,然後將最小數與有序數列的最一個數交換位置。因爲每次選擇的都是最小的數,所以經過排序之後,待排序數列變成有序(待排序數列中選擇的最小的數實際上是有序數列中最大的數,因爲比它更小的數已在上一次比較的時候被提到有序數列了)。

時間複雜度:O(n2)

java代碼實現

 /**
     * 選擇排序
     * @param a
     */
    public static  void selectSort(int[] a){
        //取數組長度
        int len = a.length;
        //取待排序數列中的第一個數做爲最小的數
        for (int i = 0 ;i<len -1;i++){
            int min = i;
            for (int j = i+1;j<len;j++){
                //用設定的最小的數與待排序數列中的每一個數比較
                if (a[min] > a[j]){
                    //如果發現假設的最小的數不是真正的最小的數,則將比他小的數的下標賦值給min
                    min = j;
                }
            }
            if(min != i){//min不等於i,假設的最小值不是最小值,把真正的最小值交換到i的位置上去
                swap(a,min,i);
            }
            //打印每次選擇排序的結果
            print(a,a.length,i+1);
        }
        //打印最終排序結果
        printResult(a,a.length);
    }

交換方法:

public  static void swap(int[] elem,int i,int j){
        int temp = elem[i];
        elem[i] = elem[j];
        elem[j] = temp;
    }

打印每次比較結果的方法:

/**
     * 打印每次比較的結果
     * @param a 待排序數組
     * @param n 數組長度
     * @param i 第幾次排序
     */
    public static void print(int[] a,int n,int i){
        System.out.println("第"+i+"次");
        for (int j =0;j<n;j++){
            System.out.print(" "+a[j]);
        }
        System.out.println();
    }

打印最終結果的方法:

/**
     * 打印最終排序結果
     * @param a
     * @param n
     */
    public static void printResult(int[] a,int n){
        System.out.println("最終排序結果:");
        for(int j = 0 ;j<n;j++){
            System.out.print(" "+a[j]);
        }
        System.out.println();
    }

結語:關於算法的性能分析,最好的方法就是在實際操作中進行體會,如果實在覺得有些地方不好理解,可以用筆畫一下方法思路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章