c#快速排序法代碼怎樣寫(xiě)

c#
小樊
81
2024-10-18 11:39:25

以下是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ù)組的左右邊界leftright作為參數(shù)。在QuickSort()方法中,我們首先判斷左邊界是否小于右邊界,如果是,則調(diào)用Partition()方法對(duì)數(shù)組進(jìn)行劃分,并返回劃分點(diǎn)的索引。然后,我們遞歸地對(duì)數(shù)組的左半部分和右半部分進(jìn)行快速排序。

Partition()方法是快速排序的關(guān)鍵步驟,它接受一個(gè)整數(shù)數(shù)組arr以及數(shù)組的左右邊界leftright作為參數(shù)。在Partition()方法中,我們首先選擇數(shù)組的第一個(gè)元素作為基準(zhǔn)值(pivot)。然后,我們使用兩個(gè)指針leftright分別從數(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

0