Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C#

WBOY
Lepaskan: 2023-09-19 09:45:34
asal
1069 orang telah melayarinya

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);
    }
}
Salin selepas log masuk

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];
    }
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!