如何實作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中文網其他相關文章!