2013-06-05 5 views
4

이것은 면접 질문입니다. 한 줄에 짝수와 홀수 정렬

는이

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

같은 배열 방법을 정렬하고 단 한 줄의 코드에서와 같은 짝수 또는 홀수 분류 할 말? 복잡성

대답의 순서 (1) 임의의 for 루프를 사용하지 않고 O이어야한다. 그 결과는 다음과 같아야합니다

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

스칼라 태그가 붙어 있지 않은 것은 얼마나 불쌍한가?'array.sortBy (n => (n % 2! = 0, n))'일을 수행한다 – Beryllium

+0

@ 베릴륨하지만 사용하는 경우 복잡성은 O (1)이어야한다. 모듈러스 다음 우리는 루프에 사용해야합니다 – Sathish

+0

두 솔루션 모두 결국 quicksort를 사용하므로 전반적인 복잡성은 일반적으로 O (1) 적이 결코 아닙니다. 스칼라 솔루션의 표현식은 Java 솔루션에서 자주 비교되는 것처럼 자주 호출되므로 여기서는 차이점을 볼 수 없습니다. 차이점은 튜플을 사용하고, 튜플을 기준으로 비교하는 정렬 방법입니다. – 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

내가 예상 한 바에 따르면, Google에서 멋진 검색어가 표시되었습니다. 이 희망에 대한 답변을 얻지 못 했으므로 나중에 인터뷰하는 동안 많은 사람들에게 유용 할 것입니다. – Sathish

+0

@Xavi, 우리는 Comparable에서도 이것을 할 수 있습니까? 그렇다면 답변에 추가 할 수 있습니까? – anshulkatta