2015-02-06 3 views
-1

Infinity, -Infinity, 기타 임의의 10 진수 및 NaN이 포함 된 부동 소수점 목록이있는 경우. 목록이 정렬 된 후 NaN은 어디에 있어야합니까 ?? 이 재귀되지 않습니다 (: 그NaN을 포함하는 목록 정렬

+0

스택 오버플로에 오신 것을 환영합니다. 여기에 질문하는 좋은 방법은 아닙니다. 문제를 해결하기 위해 지금까지 아무 것도 시도한 적이 있습니까? 사람들이 자신의 것을 보여줄 수 있도록 먼저 노력을 보여주십시오. [FAQ] (http://stackoverflow.com/tour), [How to Ask] (http://stackoverflow.com/help/how-to-ask) 및 [도움말 센터] (http : // stackoverflow)를 읽어보십시오. .com/help)을 시작으로 사용하십시오. –

+0

해결할 문제는 없으며 그 질문과 대답을 묻는 질문에 –

+0

어떤 언어입니까? Java에 대한 쉬운 대답이 있습니다. –

답변

3

당신 을 할 수 없습니다 종류의 <=NaN을 포함하여 부동 소수점 값에 대한 주문이 아니기 때문에 NaN의 비교 <=를 사용하여 포함 부동 소수점 값의 목록이 도움이된다면 나는 거품 정렬을 사용하고 있습니다 NaN <= NaN<=을 반사적으로 유지해야하며 그렇지 않습니다.

정렬 알고리즘의 전제 조건을 위반했습니다. 아무거나 일어날 수있다.

3

정렬하려면 일관된 순서가 필요합니다. 예를 들어, NaN에 대해 순서 지정 규칙을 작성해야합니다.

다행히도 이미 Java로 작업이 완료되었습니다. java.lang.DoubleComparable이고 compareTo은 "Double.NaN은이 메소드에 의해 같고 다른 모든 Double 값 (Double.POSITIVE_INFINITY 포함)보다 큰 것으로 간주됩니다."등의 확장 규칙을 사용합니다.

<= 등의 규칙 대신 확장 된 규칙을 사용하는 두 개의 이중 기본 요소를 비교하는 compare 메서드도 있습니다.

Java로 프로그래밍하는 경우이 유형을 직접 사용할 수 있습니다. double 대신 float을 사용하는 경우 java.lang.Float의 해당 방법을 참조하십시오. 다른 언어로 프로그래밍하는 경우에도 Java에서 규칙을 읽고 복사 한 다음 비교 기능에서 사용할 수 있습니다.

정렬에서이 값을 사용하면 NaN이 모든 유한 값과 양의 무한대가 정렬 된 목록의 맨 끝에 있어야합니다.

+0

팁 주셔서 감사합니다, 나는 그 사실을 몰랐습니다. 이 링크에서 compareTo에 대한 설명서를 찾았습니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html – njuffa

0

NaN은 문제의 버블 정렬의 구현에 따라 정렬 된 배열의 처음 또는 끝에 놓입니다.

전적으로 주문 기준을 어떻게 정의 하느냐에 달려 있습니다.