數組排序(2)-選擇排序

(一)選擇排序算法

    表現最穩定的排序算法之一,由於不管什麼數據進去都是O(n2)的時間複雜度,因此用到它的時候,數據規模越小越好。惟一的好處可能就是不佔用額外的內存空間了吧。數組

    選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工做原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而後,再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。以此類推,直到全部元素均排序完畢。app

  1.算法描述:ide

   (1) 初始狀態:有序區爲空,無序區爲R[1..n];ui

   (2) 第i趟排序(i=1,2,3…n-1)開始時,當前有序區和無序區分別爲R[1..i-1]和R(i..n)。該趟排序從當前無序區中-選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R[i+1..n)分別變爲記錄個數增長1個的新有序區和記錄個數減小1個的新無序區;spa

   (3) n-1趟結束,數組有序化了。code

  2.手動模擬排序:blog

   

  3.算法分析:排序

    (1)時間複雜度:平均狀況 O(n2)  最好狀況 O(n^2)  最壞狀況 O(n^2)內存

    (2)空間複雜度: O(1)

    (3)穩定性:不穩定

(二)代碼體現:

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr = {3,4,1,2,7,8,6,5};
        Selection(arr);//排序
        System.out.println("-----------------------------------------");
        print(arr);//打印結果
    }

    private static void Selection(int[] arr) {
        if(arr == null || arr.length <= 1){
            return;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i; j < arr.length; j++) {
                if(arr[j] < arr[minIndex]){
                    minIndex = j;
                }
            }
            //交換
            if(minIndex != i){
                int temp = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = temp;
            }
            //打印每一趟排序結果
            print(arr);
        }
    }

    public static void print(int[] arr){
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
            if(i != arr.length - 1){
                sb.append(", ");
            }
        }
        System.out.println(sb.append("]"));
    }
}
SelectionSort
相關文章
相關標籤/搜索