計數排序(counting sort)是一種穩定的排序演算法。計數排序使用乙個額外的陣列c,其中第i個元素是待排序陣列a中值小於等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。
限制:所有值得取值範圍不能太大,並且需要知道確切的取值範圍。本演算法需要的輔助空間要求較高。
當輸入的元素是 n 個 0 到 k 之間的整數時,它的執行時間是 θ(n + k)。計數排序不是比較排序,排序的速度快於任何比較排序演算法。
現在給出c#實現的計數排序(counting sort)
publicvoid sort(int array, int startindex, int endindex, int minvalue, int
maxvalue)
for (int i = 1; i < countingarray.length; i++)
//取結果放於新陣列sortedarray
int sortedarray = new
int[endindex - startindex + 1
];
for (int i = endindex; i >= startindex; i--)
for (int i = 0; i < sortedarray.length; i++)
}
演算法 排序 非基於比較的排序
非基於比較的排序與樣本的資料狀況有很大的關係,由於這個限制使其在工程中並不常用。非基於比較的排序有桶排序,基數排序,計數排序。這三者都能做到排序的穩定性,時間複雜度為 o n 空間複雜度為 o n 假設存在一組資料,裡面的資料只有 0 60 使用非基於比較的排序。思路 此時可以使用計數排序,準備 6...
非基於比較的排序演算法例題
題目 給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o n 且要求不能用非基於比較的排序。例 3,1,6,2,7 排序後得到 1,2,3,6,7 並且相鄰兩數的最大差值是3 元素3和元素6的差值 解決思路 利用到桶的思想,陣列有n個數,定義n 1個桶,遍歷陣列找到最小值和最大值,放...
非基於比較的排序 桶排序
我們最常用的快速排序和堆排序等演算法需要對序列中的資料進行比較,因為被稱為基於比較的排序。而非基於比較的排序有計數排序,桶排序,和在此基礎上的基數排序。要注意的是,非基於比較的排序演算法的使用都是有條件限制的,例如元素的大小限制。假設待排序資料是乙個隨機過程產生,該過程將元素一致地分布在某區間上。桶...