일반적으로 어떤 것이 더 좋을까요? 일부 컬렉션에 N 개의 요소를 삽입하고 정렬하거나 요소를 삽입하기 전에 올바른 위치를 찾아서 그 위치에 정확하게 삽입합니다 (N 번 반복).더 빠릅니다 : n 개의 요소를 정렬하거나 n 개의 요소를 올바른 위치에 하나씩 삽입 하시겠습니까?
답변
데이터 구조와 사용중인 응용 프로그램에 따라 달라질 수 있습니다.
배열에을 삽입하려면 다음 요소를 모두 오른쪽으로 이동해야합니다 (결과적으로 O(n)
삽입).
Binary Search Tree 그러나 O(logn)
에 삽입 할 수 있지만 보다 작 으면 어레이가 더 느려지고 따라서 느립니다. 한편
O(nlogn)
정렬].
또한 매우 자주 쿼리하려고하지만 드물게 요소를 추가하는 경우 너무 자주 정렬하지 않으려 고합니다. 요소를 순서대로 유지하면 쉽게이 작업을 수행 할 수 있습니다.
이것은 다른 시나리오가 무엇이며 어떻게 정렬 시간에 영향을 미치는지 설명하기 때문에 더 나은 대답입니다.일반적인 경우 유일한 정답은 "의존적"입니다. – kurtzbot
입력을 전제로하지 않고 정렬하려면 nlog (n) 시간이 필요합니다. 요소를 삽입하려면 O (n) 시간이 걸립니다 (연결된 목록). 따라서 모든 삽입 후 정렬이 빠릅니다.
데이터 구조에 따라 다릅니다. 삽입하기 전에 올바른 위치를 찾으려면 데이터 구조에 이미 저장되어 있어야하는 방식으로 요소를 정렬해야합니다. 달성하고자하는 것에 대한 추가 정보를 제공 할 수 있습니까?
요소를 삽입 할 때 요소를 확실히 정렬 할 수 있습니다. 삽입 정렬이라고합니다. [Wikipedia Link] (http://en.wikipedia.org/wiki/Insertion_sort) – kurtzbot
요소 저장에 사용되는 컬렉션에서 정렬 알고리즘을 수행하는 것과 같습니다. 나는 더 자세한 내용을 물었습니다. – Yno
amit의 대답을보세요. 그는 당신이 나중에 삽입하고 정렬 할 때 정렬의 차이를 아주 분명하게 보여줍니다. 최종 효과는 동일하지만 삽입/정렬 시간에 완전히 다른 영향을줍니다. – kurtzbot
이는 더 나은
"일부 컬렉션의 N 요소를 삽입 한 후 정렬"
하나가 정렬 O(nlogn)
알고리즘을 사용할 수 있기 때문에. 어디로이
"삽입하기 전에 요소에 대한 올바른 위치를 찾아 정확히 그 장소에 (N 번 반복) 입니까?"
은 삽입 유형이며 최악의 경우는 O(n^2)
입니다.
즉 삽입 정렬은 온라인 알고리즘입니다. 즉 정렬을 시작하기 위해 전체 데이터를 미리 알 필요가 없습니다. 병렬로 실행되는 다른 프로그램에 의해 생성되는 데이터를 고려하십시오. 여기서 삽입 정렬이 의미가 있습니다. 다른 접근 방식에서는 전체 데이터가 제 위치에 있어야합니다.
- 1. 목록에 n 개의 연속 요소를 추가하는 방법
- 2. n 개의 배열 만들기
- 3. array_count_values에서 N 요소를 얻습니다.
- 4. TreeMap을 n 개의 항목으로 트리밍
- 5. n 개의 다른 배열에 공통적 인 최대 요소를 찾으십니까?
- 6. 인용 부호가있는 부분 문자열을 보존하여 N 개의 요소를 공백으로 분할하십시오.
- 7. 배열에서 사용자가 몇 개의 요소를 삽입 했습니까?
- 8. 먼저 XSLT를 사용하여 N 개의 XML 요소를 표시하십시오.
- 9. 정렬되지 않은 배열에서 하나의 요소와 N 개의 요소를 찾음
- 10. N 개의 목록 순열
- 11. n 개의 파일에서 n 개의 열로 목록을 출력합니다.
- 12. PHP MySql 한 번에 n 개의 행을 삽입 하시겠습니까?
- 13. n 개의 목록 교차점
- 14. n 개의 문자열 조합
- 15. 반환 n 개의
- 16. OCaml에서리스트의 n 번째 요소를 반환합니까?
- 17. Java ArrayList N 요소를 선택하십시오.
- 18. LINQ의 요소에 n 자식으로 요소를 추가하는 방법
- 19. N 개의 애니메이션 객체 만들기
- 20. 2n RAM에서 n^2 요소를 정렬하는 방법
- 21. C++의 마지막 n 개 요소를 저장하는 올바른 데이터 구조
- 22. iterable1의 n 요소와 iterable2의 m 요소를 결합하십시오.
- 23. N 개의 항목을 그룹화하는 방법?
- 24. 구아바 - 라이브러리 : n 개의 인스턴스
- 25. O (log n)은 항상 O (n)보다 빠릅니다.
- 26. 프롤로그 목록에서 첫 번째 N 요소를 삭제하십시오.
- 27. N 개의 벡터를위한 메모리 레이아웃
- 28. PHP가있는 대형 MongoDB 컬렉션에서 N 번째 요소를 모두 선택 하시겠습니까?
- 29. 배열의 첫 번째 n 요소를 반복하십시오.
- 30. Linq - N 요소를 결합하는 Expression.And BinayExpression
두 번째 대안에서 설명하는 것은 삽입 정렬입니다. – sch