首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Visual C# 常用排序演算法(二):選擇排序極值查找與位置交換實作

     編輯:關於C語言

基本思想

每趟從無序區選出最小 (或最大) 元素,放入有序區末尾,直到全部排序完成。

排序過程示範

初始:[49, 38, 65, 97, 76, 13, 27, 49]

第1趟: 13 移至位置 0  → [13, 38, 65, 97, 76, 49, 27, 49]
第2趟: 27 移至位置 1  → [13, 27, 65, 97, 76, 49, 38, 49]
第3趟: 38 移至位置 2  → [13, 27, 38, 97, 76, 49, 65, 49]
第4趟: 49 移至位置 3  → [13, 27, 38, 49, 76, 49, 65, 97]
第5趟: 49 移至位置 4  → [13, 27, 38, 49, 49, 97, 65, 76]
第6趟: 76 移至位置 5  → [13, 27, 38, 49, 49, 76, 97, 65]
第7趟: 76 移至位置 6  → [13, 27, 38, 49, 49, 76, 76, 97]

C# 實作

private static void SelectionSort(ref double[] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        double minVal = array[i];
        int minIdx = i;
        
        for (int j = i; j < array.Length; j++)
        {
            if (minVal > array[j])
            {
                minVal = array[j];
                minIdx = j;
            }
        }
        ExchangeValue(ref array[i], ref array[minIdx]);
    }
}

private static void ExchangeValue(ref double a, ref double b)
{
    double t = a; a = b; b = t;
}

效能特性

指標複雜度
時間 (最好/平均/最差)O(n²) / O(n²) / O(n²)
空間O(1)
穩定性不穩定 (交換可能改變相同值相對順序)
交換次數最多 n-1 次 (所有排序中最少)

適用場景

  • 資料量小 (n < 50)
  • 記憶體寫入成本極高 (如 Flash 記憶體)
  • 教學示範選擇排序基本邏輯
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved