首頁  >  文章  >  後端開發  >  如何實作C#中的計數排序演算法

如何實作C#中的計數排序演算法

王林
王林原創
2023-09-20 15:19:47649瀏覽

如何實作C#中的計數排序演算法

如何實作C#中的計數排序演算法

計數排序是一種簡單但有效的排序演算法,它可以在O(n k)的時間複雜度下將一組整數進行排序,其中n是待排序的元素個數,k是待排序的元素範圍。

計數排序的基本概念是建立一個輔助數組,用來統計待排序序列中每個元素的出現次數。然後,透過對輔助數組進行求和操作,得到每個元素在有序序列中的位置。最後,根據輔助數組的統計結果,將元素放回原始數組中,完成排序。

下面是C#中實作計數排序演算法的具體程式碼範例:

using System;

class CountingSort
{
    public static void Sort(int[] array)
    {
        if (array == null || array.Length == 0)
        {
            return;
        }

        // 找到待排序序列中的最大值和最小值
        int min = array[0];
        int max = array[0];
        for (int i = 1; i < array.Length; i++)
        {
            if (array[i] < min)
            {
                min = array[i];
            }
            if (array[i] > max)
            {
                max = array[i];
            }
        }

        // 创建辅助数组count,用于统计待排序序列中每个元素的出现次数
        int[] count = new int[max - min + 1];

        // 统计每个元素的出现次数
        for (int i = 0; i < array.Length; i++)
        {
            count[array[i] - min]++;
        }

        // 对辅助数组进行求和操作,得到每个元素在有序序列中的位置
        for (int i = 1; i < count.Length; i++)
        {
            count[i] += count[i - 1];
        }

        // 创建临时数组,用于存储排序结果
        int[] sortedArray = new int[array.Length];

        // 根据辅助数组的统计结果,将元素放回原始数组中
        for (int i = array.Length - 1; i >= 0; i--)
        {
            int index = count[array[i] - min] - 1;
            sortedArray[index] = array[i];
            count[array[i] - min]--;
        }

        // 将排序结果拷贝回原始数组
        Array.Copy(sortedArray, array, array.Length);
    }

    // 测试计数排序算法
    static void Main(string[] args)
    {
        int[] array = { 5, 2, 9, 3, 1, 6, 8, 4, 7 };
        Console.WriteLine("原始数组:");
        PrintArray(array);
        Sort(array);
        Console.WriteLine("排序结果:");
        PrintArray(array);
    }

    // 打印数组
    static void PrintArray(int[] array)
    {
        foreach (int element in array)
        {
            Console.Write(element + " ");
        }
        Console.WriteLine();
    }
}

以上程式碼中,我們先找到待排序序列中的最大值和最小值,然後建立輔助數組count來統計每個元素的出現次數。接下來,透過對輔助數組進行求和操作,得到每個元素在有序序列中的位置。最後,根據輔助數組的統計結果,將元素放回原始數組中,完成排序。

在測試程式碼中,我們使用一個範例陣列來測試計數排序演算法。輸出結果顯示原始陣列和排序結果。

透過以上程式碼範例,我們可以了解到C#中如何實作計數排序演算法。計數排序是一種簡單但有效的排序演算法,尤其適用於待排序序列中元素範圍較小的情況。透過掌握計數排序演算法的原理和實作方式,我們可以在需要排序的時候選擇最適合的排序演算法,提高程式的效率。

以上是如何實作C#中的計數排序演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn