以下是C#語(yǔ)言中快速排序算法的實(shí)現(xiàn):
public static void QuickSort(int[] arr, int left, int right)
{
if (left < right)
{
int pivotIndex = Partition(arr, left, right);
QuickSort(arr, left, pivotIndex - 1);
QuickSort(arr, pivotIndex + 1, right);
}
}
private static int Partition(int[] arr, int left, int right)
{
int pivot = arr[left];
while (left < right)
{
while (left < right && arr[right] >= pivot)
{
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] <= pivot)
{
left++;
}
arr[right] = arr[left];
}
arr[left] = pivot;
return left;
}
在上述代碼中,QuickSort()
方法是快速排序的主方法,它接受一個(gè)整數(shù)數(shù)組arr
以及數(shù)組的左右邊界left
和right
作為參數(shù)。在QuickSort()
方法中,我們首先判斷左邊界是否小于右邊界,如果是,則調(diào)用Partition()
方法對(duì)數(shù)組進(jìn)行劃分,并返回劃分點(diǎn)的索引。然后,我們遞歸地對(duì)數(shù)組的左半部分和右半部分進(jìn)行快速排序。
Partition()
方法是快速排序的關(guān)鍵步驟,它接受一個(gè)整數(shù)數(shù)組arr
以及數(shù)組的左右邊界left
和right
作為參數(shù)。在Partition()
方法中,我們首先選擇數(shù)組的第一個(gè)元素作為基準(zhǔn)值(pivot)。然后,我們使用兩個(gè)指針left
和right
分別從數(shù)組的左側(cè)和右側(cè)開(kāi)始遍歷數(shù)組,將大于等于基準(zhǔn)值的元素移到數(shù)組的左側(cè),將小于基準(zhǔn)值的元素移到數(shù)組的右側(cè)。最后,我們將基準(zhǔn)值放到正確的位置上,并返回該位置的索引。
要使用上述代碼對(duì)數(shù)組進(jìn)行快速排序,只需調(diào)用QuickSort()
方法即可。例如:
int[] arr = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
QuickSort(arr, 0, arr.Length - 1);
foreach (int num in arr)
{
Console.Write(num + " ");
}
上述代碼將輸出排序后的數(shù)組:1 1 2 3 3 4 5 5 5 6 9
。