n個數(shù)排序算法時間復雜度是多少?一般程序員會脫口而出:O(n!)。這是按照數(shù)學家的想法,從小到大,或者從大到小,一一比較得到的算法。如果你是一位計算機專家,不是一般的程序員,就可以用O(n)時間復雜度得出結(jié)果。不信?
我要介紹的方法,不僅可以快速排序,而且可以去掉重復的數(shù)。
計算機專家要你準備一塊足夠大的干凈存儲空間(一般的計算機都可以滿足)。計算機專家排序的秘訣就是“將數(shù)放到這個數(shù)所標志的地址單元”!
實際上,計算機內(nèi)部并沒有一般的實數(shù),只有無符號的二進制整數(shù)(更多的請看本人寫的《自己設(shè)計制作CPU與單片機》第10章),因而你可以將一個數(shù)放在這個數(shù)標志的存儲地點(用指針實現(xiàn)),于是n個數(shù)排序算法時間復雜度就從O(n!)轉(zhuǎn)化成O(n)啦。不僅如此,那些重復的數(shù)也會剩下唯一的一個了。(姜詠江)
快速排序去重?計算機專家與程序員的不同 |
|