勵志

勵志人生知識庫

哈希表排序

哈希表排序是一種利用哈希表進行排序的算法。首先,將待排序的數組中的每個元素作為鍵(key),出現的次數作為值(value),更新到哈希表中。同時,需要求出數組的最大值和最小值。然後,以最小值為起始位置進行遍歷,若當前值在哈希表中存在,則得到當前值出現的次數n,在新數組(新數組可以新建也可以直接使用待排數組)尾部加入n個當前值。直到遍歷到最大值時程式結束,新數組即為排好序的數組。如果需要從大到小排序,可以反向遍歷。

該算法的時間複雜度為O(n+k),k為數組最大值和最小值之差。k越小,排序效率越高,k最小為1,最好的情況下遍歷次數等於數組長度加1。當最大值和最小值之差越大時,k也就越大,速度就越慢。此算法處理各元素之差較小的數組效率最高,在k值小於10000時,排序速度多數情況比STL的sort()算法快。

空間複雜度方面,當待排數組無重複元素時,創建的哈希表長度最大,此時哈希表等於待排數組長度,空間複雜度為O(n)。重複數字越多,哈希表長度越小。當待排數組元素全部相同時,哈希表長度最小,此時長度為1,空間複雜度O(1)。平均空間複雜度為O(n)。