일반적으로 최악의 경우의 복잡도 O (N * log (N))에서 실행되는 임의의 데이터에 대해 "더 똑똑한"비교 정렬을 수행합니다.스트리밍 된 데이터를 정렬 된 목록으로 읽기
제 질문은 컬렉션을 정렬하지 말고 데이터 스트림을 요청하면 어떻게됩니까? 즉, 값은 우리에게 다음에 오는 것의 표시 자없이 하나씩 주어집니다 (데이터가 유효/범위 내에 있음을 제외하고). 직관적으로, 모든 것을 모으고 나중에 정렬 (포커 핸드를 처리 한 후 정렬)보다는 오히려 그것이 나오는대로 데이터를 정렬하는 것이 더 우수하다고 생각할 수도 있습니다 (하나씩 포커 핸드를 선택하는 것). 이게 사실인가요?
수집 및 정렬은 O (N + N * log (N)) = O (N * log (N))이됩니다. 그러나 그것이 오면 정렬 할 때, 그것은 O (N * K)입니다. 여기서 K = 적절한 색인 + 요소를 삽입 할 시간을 찾는 시간입니다. K의 가치는 이제 데이터 구조의 선택에 달려 있기 때문에 이것은 복잡합니다. 배열은 인덱스를 찾는 것이 우수하지만 요소를 삽입하는 데 시간을 낭비합니다. 연결된 목록은 더 쉽게 삽입 할 수 있지만 이진 검색으로는 색인을 찾을 수 없습니다.
이 문제에 대한 전체적인 논의가 있습니까? 우리는 언제 다른 방법을 사용해야합니까? 때때로 서로를 소팅하는 바람직한 중간 전략이있을 수 있습니까?