Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan algoritma isihan baldi dalam C#

Bagaimana untuk melaksanakan algoritma isihan baldi dalam C#

WBOY
WBOYasal
2023-09-19 11:24:331341semak imbas

Bagaimana untuk melaksanakan algoritma isihan baldi dalam C#

Cara melaksanakan algoritma isihan baldi dalam C#

Isih Baldi ialah algoritma isihan yang membahagikan elemen untuk diisih ke dalam baldi yang berbeza mengikut saiznya, dan kemudian mengisih setiap baldi secara berasingan. Kemudian gabungkan elemen dalam setiap baldi bersama-sama untuk mendapatkan hasil yang dipesan. Kerumitan masa pengisihan baldi ialah O(n), dan dalam beberapa kes tertentu, ia juga boleh mencapai kecekapan pengisihan linear.

Yang berikut akan memperkenalkan cara untuk melaksanakan algoritma pengisihan baldi dalam C# dan memberikan contoh kod khusus:

using System;
using System.Collections.Generic;

class BucketSort
{
    /// <summary>
    /// 桶排序算法实现
    /// </summary>
    /// <param name="data">待排序的数组</param>
    public static void Sort(double[] data)
    {
        if (data == null || data.Length <= 1)
        {
            return;
        }

        int bucketCount = data.Length;
        List<double>[] buckets = new List<double>[bucketCount];
        for (int i = 0; i < bucketCount; i++)
        {
            buckets[i] = new List<double>();
        }

        // 将数据分配到各个桶中
        for (int i = 0; i < data.Length; i++)
        {
            int bucketIndex = (int)(data[i] * bucketCount);
            buckets[bucketIndex].Add(data[i]);
        }

        // 对每个桶中的数据进行插入排序
        for (int i = 0; i < bucketCount; i++)
        {
            InsertionSort(buckets[i]);
        }

        // 合并各个有序桶中的数据
        int dataIndex = 0;
        for (int i = 0; i < bucketCount; i++)
        {
            for (int j = 0; j < buckets[i].Count; j++)
            {
                data[dataIndex++] = buckets[i][j];
            }
        }
    }

    /// <summary>
    /// 插入排序算法实现
    /// </summary>
    /// <param name="data">待排序的数组</param>
    private static void InsertionSort(List<double> data)
    {
        for (int i = 1; i < data.Count; i++)
        {
            double temp = data[i];
            int j = i - 1;
            while (j >= 0 && data[j] > temp)
            {
                data[j + 1] = data[j];
                j--;
            }
            data[j + 1] = temp;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        double[] data = { 0.5, 0.2, 0.8, 0.3, 0.6, 0.1, 0.9, 0.7, 0.4 };
        Console.WriteLine("原始数组:");
        PrintData(data);
        BucketSort.Sort(data);
        Console.WriteLine("排序后的数组:");
        PrintData(data);
    }

    /// <summary>
    /// 打印数组元素
    /// </summary>
    /// <param name="data">待打印的数组</param>
    private static void PrintData(double[] data)
    {
        foreach (var item in data)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();
    }
}

Di atas ialah kod contoh untuk melaksanakan algoritma pengisihan baldi dalam C#. Dalam fungsi utama, tatasusunan yang mengandungi beberapa perpuluhan rawak dicipta dan fungsi BucketSort.Sort方法对其进行排序。最后,通过调用PrintData digunakan untuk mengeluarkan tatasusunan yang diisih ke konsol.

Dengan menjalankan kod di atas, anda akan mendapat output yang serupa dengan yang berikut:

原始数组:
0.5 0.2 0.8 0.3 0.6 0.1 0.9 0.7 0.4
排序后的数组:
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

Isih baldi ialah algoritma pengisihan yang cekap, terutamanya sesuai untuk situasi di mana elemen data diagihkan secara sama rata. Melalui contoh kod di atas, anda boleh belajar cara melaksanakan algoritma pengisihan baldi dalam C#, dan anda boleh menggunakan pengisihan baldi untuk melaksanakan operasi pengisihan dalam projek anda sendiri. Pada masa yang sama, anda juga boleh mengubah suai dan mengembangkan kod mengikut keperluan sebenar untuk memenuhi keperluan pengisihan tertentu.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan algoritma isihan baldi 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