1. 程式人生 > >C#演算法設計排序篇之04-選擇排序(附帶動畫演示程式)

C#演算法設計排序篇之04-選擇排序(附帶動畫演示程式)

選擇排序(Selection Sort)

選擇排序是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。

示例: 

public class Program {

    public static void Main(string[] args) {
        int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };

        SelectionSort(array);
        ShowSord(array);

        Console.ReadKey();
    }

    private static void ShowSord(int[] array) {
        foreach(var num in array) {
            Console.Write($"{num} ");
        }
        Console.WriteLine();
    }

    public static void SelectionSort(int[] array) {
        int swap;
        int pos = 0;
        for(int i = 0; i < array.Length - 1; i++) {
            pos = i;
            for(int j = i + 1; j < array.Length; j++) {
                if(array[j] < array[pos]) {
                    pos = j;
                }
            }
            swap = array[pos];
            array[pos] = array[i];
            array[i] = swap;
        }
    }

}

以上是選擇排序演算法的一種實現,以下是這個案例的輸出結果: 

8 11 21 28 32 43 48 56 69 72 80 94

分析:

選擇排序演算法的時間複雜度為: O(n^{2}) 。其分析過程同氣泡排序,可參考我的另一篇博文:

需要注意的是,雖然選擇排序演算法的時間複雜度和氣泡排序演算法的時間複雜度都是 O(n^{2}) ,但是選擇排序演算法的實際執行效率要高於氣泡排序,因為完成數字交換的動作是在外迴圈中,即只在找到最小(或最大)值後交換數字一次,而不像氣泡排序是在雙層迴圈下交換數字。

AlgorithmMan:

AlgorithmMan by Iori,AlgorithmMan是使用C#開發的一套用於演算法演示的工具。