ホームページ >バックエンド開発 >C#.Net チュートリアル >C# でバケット ソート アルゴリズムを実装する方法

C# でバケット ソート アルゴリズムを実装する方法

WBOY
WBOYオリジナル
2023-09-19 11:24:331380ブラウズ

C# でバケット ソート アルゴリズムを実装する方法

バケット ソート アルゴリズムを C で実装する方法

#バケット ソートは、並べ替える要素をサイズに応じてさまざまなカテゴリに分割する並べ替えアルゴリズムです。各バケットは個別にソートされます。次に、順序付けされた結果を取得するために、各バケット内の要素をマージします。バケットソートの時間計算量は O(n) であり、特定のケースでは、線形ソートの効率を達成することさえできます。

以下では、C# でバケット ソート アルゴリズムを実装する方法と、具体的なコード例を紹介します。

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();
    }
}

上記は、C# でバケット ソート アルゴリズムを実装するためのサンプル コードです。 main 関数では、ランダムな小数を含む配列が作成され、BucketSort.Sort メソッドを使用して並べ替えられます。最後に、PrintData 関数を呼び出して、ソートされた配列がコンソールに出力されます。

上記のコードを実行すると、次のような出力が得られます。

原始数组:
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

バケット ソートは効率的なソート アルゴリズムであり、データ要素の分布が比較的均一である状況に特に適しています。上記のコード例を通じて、C# でバケット ソート アルゴリズムを実装する方法を学習し、バケット ソートを使用して独自のプロジェクトでソート操作を実行することができます。同時に、実際のニーズに応じてコードを変更および拡張し、特定の並べ替えのニーズを満たすこともできます。

以上がC# でバケット ソート アルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。