當前位置: 妍妍網 > 碼農

C# 常用排序方式

2024-02-13碼農

在C#中,排序是數據處理中常見的操作。C# 提供了多種排序方式,從簡單的氣泡排序到高效的內建排序演算法,開發者可以根據不同的場景和需求選擇適合的排序方法。本文將介紹C#中常用的幾種排序方式,包括它們的工作原理、效能特點以及適用場景。

  1. 氣泡排序(Bubble Sort)

氣泡排序是一種簡單的排序演算法,透過重復地遍歷待排序的序列,比較每對相鄰的元素,如果它們的順序錯誤就交換位置,直到沒有元素需要交換為止。

publicstaticvoidBubbleSort(int[] array)
{
int n = array.Length;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (array[j] > array[j + 1])
{
// 交換元素
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}

氣泡排序的時間復雜度為O(n^2),因此它不適合處理大規模數據。但由於其實作簡單,經常作為教學範例。

  1. 選擇排序(Selection Sort)

選擇排序也是一種簡單的排序演算法,它的工作原理是每次從未排序的部份中選擇最小(或最大)的元素,存放到排序序列的起始位置,直到所有元素均排序完畢。

publicstaticvoidSelectionSort(int[] array)
{
int n = array.Length;
for (int i = 0; i < n - 1; i++)
{
int minIndex = i;
for (int j = i + 1; j < n; j++)
{
if (array[j] < array[minIndex])
{
minIndex = j;
}
}
// 交換找到的最小元素與第一個未排序的元素
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}

選擇排序的時間復雜度同樣為O(n^2),效率不高,但在某些特定場景(如小規模數據或需要穩定排序時)中可能更適用。

  1. 插入排序(Insertion Sort)

插入排序的工作原理是透過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。

publicstaticvoidInsertionSort(int[] array)
{
int n = array.Length;
for (int i = 1; i < n; i++)
{
int key = array[i];
int j = i - 1;
while (j >= 0 && array[j] > key)
{
array[j + 1] = array[j];
j = j - 1;
}
array[j + 1] = key;
}
}

插入排序的時間復雜度在最好情況下為O(n),平均和最壞情況下為O(n^2)。它在小規模數據或數據幾乎已經有序時表現良好。

  1. 快速排序(Quick Sort)

快速排序是一種高效的排序演算法,它采用分治的思想,透過選擇一個基準元素將陣列分為兩個子陣列,一個包含比基準小的元素,另一個包含比基準大的元素,然後對這兩個子陣列進行遞迴排序。

publicstaticvoidQuickSort(int[] array, int low, int high)
{
if (low < high)
{
int pi = Partition(array, low, high);
QuickSort(array, low, pi - 1);
QuickSort(array, pi + 1, high);
}
}
privatestaticintPartition(int[] array, int low, int high)
{
int pivot = array[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++)
{
if (array[j] < pivot)
{
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int temp = array[i + 1];
array[