計數排序的應用與分析

2021-09-01 16:31:13 字數 656 閱讀 3861

/*問題描述:某公司有幾萬名員工, 請完成乙個時間複雜度為o(n)的演算法對該公司員工的年齡做排序, 要

求空間複雜度為o(1)

問題分析:因為人的年齡總共也不會超過100歲,所以可以建立乙個大小為100的輔助空間(陣列),用於

統計各個年齡的數目,統計後在把輔助空間中對應不為0的index, 插入到對應的待排陣列中

即可完成排序.

演算法分析:此類排序的方式稱為計數排序(couting sort), 對於任意陣列我們必須知道此陣列中最大

數字,才能建立輔助空間用於計數,當陣列中的maxer非常大的情況下, 需要建立極為龐大的

輔助陣列,此時若陣列中只有乙個數,我們也要遍歷整個輔助陣列,那麼對於時間來說極為浪

費,因此待排陣列中最大的數越小,且越貼近待排容量,演算法最優

*/#include

void sort_ages(int ages, int len)}}

int main()

;sort_ages(ages, 6);

for(int i = 0; i < 6; ++i)

printf("%d ", ages[i]);

}

執行結果: 33 33 45 66 77 100

計數排序應用

給定乙個陣列,求如果排序之後,相鄰兩數的最大差值,要求時間複雜度o n 且要求不能用非基於比較的排序。隨機生成9個數,範圍在0 99 define length 9 長度 intmaxd int arr 最大差值處理函式 if min max return0 bool empty length 1 ...

計數排序與穩定排序

我們常用的排序演算法,有冒泡演算法 快速演算法等,它們都是基於元素之間的比較來進行排序,有一種特殊的演算法不是基於元素比較,而是利用陣列下標來確定元素在陣列的位置,這種演算法就是 計數排序 先來說一下實現的原理,假設有20個隨機整數的陣列array,他們值分別是 9,3,5,4,9,1,2,7,8,...

演算法分析之 計數排序

計數排序不同於比較排序,是基於計數的方式,對於計數排序,假設每乙個輸入都是介於0 k之間的整數。對於每乙個輸入元素x,確定出小於x的元素的個數。假如有17個元素小於x,則x就屬於第18個輸出位置。計數排序涉及到三個陣列a 0 length 1 length為陣列a的長度 陣列b與陣列a長度相等,存放...