AFAIK counting sort的是使用下面的算法:性能計數排序
// A: input array
// B: output array
// C: counting array
sort(A,B,n,k)
1. for(i:k) C[i]=0;
2. for(i:n) ++C[A[i]];
3. for(i:k) C[i]+=C[i-1];
4. for(i:n-1..0) { B[C[A[i]]-1]=A[i]; --C[A[i]]; }
什麼我刪除步驟3和4,並做以下?
3. t=0; for(i:k) while(C[A[i]]) { --A[i]; B[t++]=i; }
的完整代碼here,貌似不錯,但我不知道哪一個具有更好的性能。
問題:
- 我猜這兩個版本的複雜性將是相同的,是TURE?
- 在步驟3和步驟4中,第一個版本需要迭代n + k次,第二個版本只需要迭代n次。第二個有更好的表現嗎?
您的僞代碼與實際代碼不同。 – ltjax
這看起來很像維基百科文章中描述的第一個變體,但並不完全。你確定這是正確的嗎?看起來很奇怪我指數A,甚至更古怪減少A – harold