cari
Rumahpembangunan bahagian belakangTutorial C#.NetBagaimana untuk menulis algoritma isihan timbunan menggunakan C#

Bagaimana untuk menulis algoritma isihan timbunan menggunakan C#

Cara menggunakan C# untuk menulis algoritma isihan timbunan

Isih Timbunan ialah algoritma isihan berdasarkan timbunan binari yang lengkap, dan kerumitan masanya ialah O(nlogn). Dalam artikel ini, kami akan menulis algoritma isihan timbunan menggunakan C# dan memberikan contoh kod terperinci.

  1. Bina timbunan

Dalam algoritma isihan timbunan, anda perlu membina timbunan maks (atau timbunan min). Sifat timbunan maks ialah nilai nod induk adalah lebih besar daripada atau sama dengan nilai nod anaknya, manakala yang sebaliknya berlaku untuk timbunan min.

Untuk membina timbunan maks, kita boleh menggunakan tatasusunan untuk mewakili timbunan. Nod timbunan disusun dalam susunan hierarki. Memandangkan indeks nod i, kita boleh mencari indeks nod induk dan nod anak dengan:

  • Indeks nod induk = (i - 1) / 2
  • Indeks nod anak kiri = 2 * i + 1
  • Nod Anak Kanan indeks = 2 * i + 2

Menggunakan indeks ini, kita boleh bergerak dengan mudah di sekeliling timbunan dan menolak elemen besar (atau kecil) ke bahagian atas timbunan.

Berikut ialah kod sampel untuk melaksanakan timbunan maks menggunakan C#:

public void BuildMaxHeap(int[] arr, int n, int i)
{
    int largest = i; // 初始化最大元素的索引
    int left = 2 * i + 1; // 左子节点索引
    int right = 2 * i + 2; // 右子节点索引

    // 如果左子节点比父节点大,更新最大元素的索引
    if (left < n && arr[left] > arr[largest])
    {
        largest = left;
    }

    // 如果右子节点比父节点大,更新最大元素的索引
    if (right < n && arr[right] > arr[largest])
    {
        largest = right;
    }

    // 如果最大元素的索引不是父节点的索引,交换父节点和最大元素
    if (largest != i)
    {
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;

        // 递归地建立最大堆
        BuildMaxHeap(arr, n, largest);
    }
}
  1. Isihan timbunan

Selepas membina timbunan maks, kita boleh menggunakan algoritma isihan timbunan untuk mengisih tatasusunan. Idea isihan timbunan adalah untuk terus menukar elemen terbesar ke penghujung tatasusunan dan mengurangkan julat tatasusunan yang hendak diisih. Langkah-langkah khusus adalah seperti berikut:

  • Bina timbunan maksimum
  • Tukar elemen atas dan elemen terakhir timbunan
  • Laraskan semula timbunan
  • Ulang langkah di atas sehingga hanya tinggal satu elemen dalam tatasusunan untuk diisih

Berikut ialah isihan timbunan menggunakan kod Contoh C# untuk:

public void HeapSort(int[] arr)
{
    int n = arr.Length;

    // 构建最大堆
    for (int i = n / 2 - 1; i >= 0; i--)
    {
        BuildMaxHeap(arr, n, i);
    }

    // 交换堆顶元素和末尾元素,并重建最大堆
    for (int i = n - 1; i > 0; i--)
    {
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;

        BuildMaxHeap(arr, i, 0);
    }
}
  1. Kod ujian

Untuk mengesahkan bahawa algoritma isihan timbunan kami adalah betul, kami boleh menulis beberapa kod ujian yang menyusun tatasusunan yang dijana secara rawak dan mengeluarkan keputusan untuk semakan. Berikut ialah contoh kod ujian isihan timbunan yang ditulis dalam C#:

int[] arr = { 12, 11, 13, 5, 6, 7 };
HeapSort(arr);

Console.WriteLine("排序后的数组:");
foreach (var element in arr)
{
    Console.Write(element + " ");
}
  1. Ringkasan

Melalui langkah di atas, kami telah berjaya menulis algoritma isihan timbunan menggunakan C# dan memberikan contoh kod terperinci. Isihan timbunan ialah algoritma pengisihan yang cekap yang memberikan prestasi yang baik dalam kebanyakan kes. Saya harap artikel ini akan membantu anda memahami dan melaksanakan algoritma isihan timbunan!

Atas ialah kandungan terperinci Bagaimana untuk menulis algoritma isihan timbunan menggunakan 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
Relevan berterusan C# .NET: Lihat penggunaan semasaRelevan berterusan C# .NET: Lihat penggunaan semasaApr 16, 2025 am 12:07 AM

C#.NET masih penting kerana ia menyediakan alat dan perpustakaan yang kuat yang menyokong pelbagai pembangunan aplikasi. 1) C# menggabungkan rangka kerja NET untuk menjadikan pembangunan cekap dan mudah. 2) Mekanisme keselamatan dan sampah jenis C#meningkatkan kelebihannya. 3) .NET menyediakan persekitaran berjalan lintas platform dan API yang kaya, meningkatkan fleksibiliti pembangunan.

Dari web ke desktop: fleksibiliti C# .netDari web ke desktop: fleksibiliti C# .netApr 15, 2025 am 12:07 AM

C#.netisversatileforbothwebanddesktopdevelopment.1) Forweb, useasp.netfordynamicapplications.2) Fordesktop, ExployWindowsFormsor Wpfforrichinterfaces.3) UseXamarinforcross-platformdevelopment, enablingcodesharingacrosswindows, macOS, linux, andmobiledevices.

C# .NET dan Masa Depan: Mengadaptasi Teknologi BaruC# .NET dan Masa Depan: Mengadaptasi Teknologi BaruApr 14, 2025 am 12:06 AM

C# dan .NET menyesuaikan diri dengan keperluan teknologi baru melalui kemas kini dan pengoptimuman berterusan. 1) C# 9.0 dan .NET5 Memperkenalkan jenis rekod dan pengoptimuman prestasi. 2) .Netcore meningkatkan sokongan asli dan kontena awan. 3) ASP.Netcore mengintegrasikan dengan teknologi web moden. 4) ML.NET menyokong pembelajaran mesin dan kecerdasan buatan. 5) Pengaturcaraan Asynchronous dan Amalan Terbaik meningkatkan prestasi.

Adakah C# .net sesuai untuk anda? Menilai kebolehgunaannyaAdakah C# .net sesuai untuk anda? Menilai kebolehgunaannyaApr 13, 2025 am 12:03 AM

C#.netissusuitibleforenterprise-levelapplicationswithinthememicrosoftecosystemduetoitsstrongtyping, richlibraries, androbustperformance.

C# kod dalam .NET: Meneroka proses pengaturcaraanC# kod dalam .NET: Meneroka proses pengaturcaraanApr 12, 2025 am 12:02 AM

Proses pengaturcaraan C# dalam .NET termasuk langkah -langkah berikut: 1) Menulis C# Code, 2) Menyusun bahasa pertengahan (IL), dan 3) yang dilaksanakan oleh Runtime .NET (CLR). Kelebihan C# dalam .NET adalah sintaks moden, sistem jenis yang kuat dan integrasi yang ketat dengan Rangka Kerja .NET, sesuai untuk pelbagai senario pembangunan dari aplikasi desktop ke perkhidmatan web.

C# .NET: Meneroka Konsep Teras dan Asas PengaturcaraanC# .NET: Meneroka Konsep Teras dan Asas PengaturcaraanApr 10, 2025 am 09:32 AM

C# adalah bahasa pengaturcaraan yang berorientasikan objek moden yang dibangunkan oleh Microsoft dan sebagai sebahagian daripada Rangka Kerja .NET. 1.C# menyokong pengaturcaraan berorientasikan objek (OOP), termasuk enkapsulasi, warisan dan polimorfisme. 2. Pengaturcaraan Asynchronous dalam C# dilaksanakan melalui Async dan menunggu kata kunci untuk meningkatkan respons aplikasi. 3. Gunakan LINQ untuk memproses koleksi data dengan ringkas. 4. Kesilapan umum termasuk pengecualian rujukan null dan pengecualian indeks luar. Kemahiran penyahpepijatan termasuk menggunakan debugger dan pengendalian pengecualian. 5. Pengoptimuman Prestasi termasuk menggunakan StringBuilder dan mengelakkan pembungkusan yang tidak perlu dan unboxing.

Ujian C# .NET Aplikasi: Unit, Integrasi, dan Ujian Akhir ke AkhirUjian C# .NET Aplikasi: Unit, Integrasi, dan Ujian Akhir ke AkhirApr 09, 2025 am 12:04 AM

Strategi ujian untuk aplikasi C#. NET termasuk ujian unit, ujian integrasi, dan ujian akhir-ke-akhir. 1. Ujian unit memastikan bahawa unit minimum kod berfungsi secara bebas, menggunakan rangka kerja MSTest, Nunit atau Xunit. 2. Ujian Bersepadu Mengesahkan fungsi pelbagai unit yang digabungkan, data simulasi yang biasa digunakan dan perkhidmatan luaran. 3. Ujian akhir-ke-akhir mensimulasikan proses operasi lengkap pengguna, dan selenium biasanya digunakan untuk ujian automatik.

Advanced C# .NET Tutorial: Ace Wawancara Pemaju Kanan Anda SeterusnyaAdvanced C# .NET Tutorial: Ace Wawancara Pemaju Kanan Anda SeterusnyaApr 08, 2025 am 12:06 AM

Temu bual dengan pemaju kanan C# memerlukan menguasai pengetahuan teras seperti pengaturcaraan asynchronous, LINQ, dan prinsip kerja dalaman Rangka .NET. 1. Pengaturcaraan Asynchronous memudahkan operasi melalui async dan menunggu untuk meningkatkan respons aplikasi. 2.Linq mengendalikan data dalam gaya SQL dan perhatikan prestasi. 3. CLR kerangka bersih menguruskan ingatan, dan pengumpulan sampah perlu digunakan dengan berhati -hati.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma