정렬 알고리즘은 다음과 같습니다.
목록이 정렬되지 않은 동안 모든 항목의 절반을 스냅하십시오 (목록에서 제거). 목록이 정렬되거나 하나의 항목 만 남을 때까지 계속하십시오 (기본적으로 정렬 됨). 이 정렬 알고리즘은 구현에 따라 다른 결과를 제공 할 수 있습니다.
품목 제거 절차는 결정할 구현에 달려 있지만, 품목 제거 절차를 한 번 통과 한 후 목록의 길이는 절반이어야합니다. 알고리즘은 목록의 반이 길거나 언급되지 않은 한 번에 하나씩, 전반 또는 목록, 목록의 마지막 절반, 모든 홀수 항목, 모든 짝수 항목을 제거하기로 결정할 수 있습니다.
입력 목록은 2 ^ n 항목의 완벽하게 나눌 수있는 목록뿐만 아니라 임의의 양의 항목을 포함 할 수 있습니다 (이유로, 최대 1000 개의 항목을 말합시다). 런타임 중에 목록이 홀수이거나 하드 코딩되거나 임의로 결정된 경우 (n + 1) / 2 또는 (n-1) / 2 항목을 제거해야합니다. 우주가 이상한 양의 생물을 포함하고 있다면 Thanos는 어떻게 할 것인가?
이전 항목보다 작은 항목이 없으면 목록이 정렬됩니다. 입력에서 중복이 발생할 수 있으며 출력에서 발생할 수 있습니다.
프로그램은 정수 배열 (stdin 또는 매개 변수, 개별 항목 또는 배열 매개 변수를 통해)을 가져 와서 정렬 된 배열을 리턴하거나 stdout에 인쇄해야합니다.
예 :
// A sorted list remains sorted
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
// A list with duplicates may keep duplicates in the result
[1, 2, 3, 4, 3] -> [1, 3, 3] // Removing every second item
[1, 2, 3, 4, 3] -> [3, 4, 3] -> [4, 3] -> [3] // Removing the first half
[1, 2, 3, 4, 3] -> [1, 2] // Removing the last half
[1, 2, 4, 3, 5]
다른 결과를 줄 수 있습니다.
// Removing every second item:
[1, 2, 4, 3, 5] -> [1, 4, 5]
또는:
// Removing the first half of the list
[1, 2, 4, 3, 5] -> [3, 5] // With (n+1)/2 items removed
[1, 2, 4, 3, 5] -> [4, 3, 5] -> [3, 5] // With (n-1)/2 items removed
또는:
// Removing the last half of the list
[1, 2, 4, 3, 5] -> [1, 2] // With (n+1)/2 items removed
[1, 2, 4, 3, 5] -> [1, 2, 4] // With (n-1)/2 items removed
또는:
// Taking random items away until half (in this case (n-1)/2) of the items remain
[1, 2, 4, 3, 5] -> [1, 4, 3] -> [4, 3] -> [4]
[9, 1, 1, 1, 1]
. 이 입력에서 내 알고리즘이 실패했습니다