2013-06-05 125 views
4

這是一個面試問題。在單行中排序偶數和奇數

說你有一個像這樣

{54,23,545,65,23,4,1,2,5} 

數組如何排序併爲偶數或奇數在一行代碼分類?

答案的複雜性順序應該是O(1),而不使用任何for循環。結果應該是:

{2,4,54,1,5,23,23,65,545} 
+2

太可惜了,沒有標記爲Scala:'array.sortBy(n =>(n%2!= 0,n))'做的工作 – Beryllium

+0

@Beryllium但是如果你使用複雜度應該是O(1)模數,那麼我們必須使用for循環 – Sathish

+0

這兩種解決方案最終都使用快速排序,因此總體複雜度從來就不是O(1)。在Java解決方案中,Scala解決方案中的表達式可能被稱爲經常比較,所以我在這裏沒有看到區別。區別在於使用元組和一種基於元組進行比較的排序方法。 – Beryllium

回答

6

如果實例化和使用匿名實現Comparator可以考慮單行:

Arrays.sort(arr, new Comparator<Integer>(){public int compare(Integer o1, Integer o2) {return o1%2 == o2%2 ? o1.compareTo(o2) : (o1%2 == 0 ? -1 : 1); }}); 

Ideone demo

+1

+1,這是一個正確的答案和簡單的智能:) – anshulkatta

+0

這是我所期望的,真棒在谷歌搜索。沒有得到這個希望的答案,所以在將來它會在面試中很有用 – Sathish

+0

@Xavi,我們可以用Comparable來做到這一點,如果是這樣,你可以添加回答? – anshulkatta