Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C#

Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C#

WBOY
WBOYasal
2023-09-19 09:45:341073semak imbas

Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C#

Cara melaksanakan algoritma isihan gabungan dalam C#

Isih Gabung ialah algoritma isihan klasik berdasarkan idea bahagi dan takluk, yang berfungsi dengan membahagikan Masalah besar dibahagikan kepada beberapa masalah kecil, dan kemudian masalah kecil diselesaikan langkah demi langkah dan hasilnya digabungkan untuk menyelesaikan pengisihan. Berikut akan memperkenalkan cara melaksanakan algoritma isihan gabungan dalam C# dan memberikan contoh kod khusus.

Idea asas isihan gabungan adalah untuk membahagikan urutan untuk diisih kepada berbilang jujukan, mengisihnya secara berasingan, dan kemudian menggabungkan urutan yang diisih ke dalam urutan tertib. Kunci kepada algoritma ini adalah untuk melaksanakan operasi pemisahan dan penggabungan bagi urutan.

Pertama, kita perlu menulis fungsi rekursif untuk melaksanakan operasi pisah, membahagikan jujukan asal kepada dua jujukan dan secara rekursif memanggil algoritma isihan gabungan untuk mengisih jujukan. Kod khusus adalah seperti berikut:

static void MergeSort(int[] array, int left, int right)
{
    if (left < right)
    {
        int middle = (left + right) / 2;
        MergeSort(array, left, middle);
        MergeSort(array, middle + 1, right);
        Merge(array, left, middle, right);
    }
}

Seterusnya, kita perlu menulis fungsi cantum untuk menggabungkan dua urutan tertib menjadi satu urutan tertib. Kunci kepada operasi gabungan adalah untuk membandingkan unsur-unsur dalam dua urutan dan meletakkannya ke dalam tatasusunan tambahan mengikut saiz. Kod khusus adalah seperti berikut:

static void Merge(int[] array, int left, int middle, int right)
{
    int[] temp = new int[array.Length];
    int i = left;
    int j = middle + 1;
    int k = left;

    while (i <= middle && j <= right)
    {
        if (array[i] <= array[j])
        {
            temp[k] = array[i];
            i++;
        }
        else
        {
            temp[k] = array[j];
            j++;
        }
        k++;
    }

    while (i <= middle)
    {
        temp[k] = array[i];
        i++;
        k++;
    }

    while (j <= right)
    {
        temp[k] = array[j];
        j++;
        k++;
    }

    for (int l = left; l <= right; l++)
    {
        array[l] = temp[l];
    }
}

Akhirnya, kita boleh mengisih tatasusunan dengan memanggil fungsi MergeSort Kod khusus adalah seperti berikut:

static void Main(string[] args)
{
    int[] array = { 5, 3, 8, 4, 2, 1, 9, 7, 6 };
    MergeSort(array, 0, array.Length - 1);

    Console.WriteLine("排序后的数组:");
    for (int i = 0; i < array.Length; i++)
    {
        Console.Write(array[i] + " ");
    }

    Console.ReadLine();
}

Di atas. ialah cara melaksanakan pengisihan gabungan dalam C# Langkah terperinci dan contoh kod algoritma. Dengan membahagi jujukan secara rekursif, mengisih jujukan, dan menggabungkan hasil, kami boleh mengisih jujukan dalam sebarang saiz dengan cekap. Kerumitan masa pengisihan gabungan ialah O(nlogn), yang merupakan algoritma pengisihan yang agak pantas.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn