자료 구조와 알고리즘

원소 수 10인 배열을 삽입 정렬로 오름차순 정렬한다. 두 번째 이후의 원소를 차례로 꺼내어, 왼쪽 이웃부터 차례로 비교하며 꺼낸 값 이하인 원소가 발견되거나 맨 앞에 도달할 때까지 비교한다. 처음부터 오름차순으로 늘어서 있는 경우와 내림차순으로 늘어서 있는 경우의 비교 횟수의 조합은?

  1. A둘 다 45회
  2. B10회와 100회
  3. C9회와 45회
정답과 해설 보기

정답: C. 9회와 45회

오름차순으로 늘어서 있으면 꺼낸 값은 왼쪽 이웃과 1회 비교하는 것만으로 위치가 정해지므로, 9개의 원소에서 합계 9회입니다. 내림차순이면 i번째로 꺼내는 값은 왼쪽에 있는 i개 모두와 비교하므로 1 + 2 + … + 9 = 45회가 됩니다. 이처럼 삽입 정렬은 최선 O(n), 최악 O(n²)으로 입력에 따라 크게 달라지며, 거의 정렬된 데이터에는 매우 빠르다는 특징이 있습니다. 이 성질을 살려 간격을 둔 원소끼리 먼저 삽입 정렬을 하는 것이 셸 정렬이며, Timsort 등도 짧은 구간에 삽입 정렬을 사용합니다.

이 분야 연습하기 분야로 돌아가기

자료 구조와 알고리즘의 다른 문제

  1. 최악의 경우에도 시간 복잡도가 O(n log n)이고, 작업용 배열 등의 추가 기억 영역을 거의 사용하지 않고 정렬할 수 있는 정렬 방식은?
  2. (이름, 점수) 데이터 (A, 80), (B, 70), (C, 80), (D, 70)이 이 순서로 늘어서 있다. 점수의 오름차순으로 안정 정렬했을 때 이름의 순서는?
  3. 퀵 정렬의 시간 복잡도가 O(n²)이 되는 전형적인 경우는?
  4. 병합 정렬에서 오름차순으로 정렬된 두 열 1, 4, 7, 9와 2, 3, 8, 10을, 맨 앞끼리 비교하여 작은 쪽을 출력하는 것을 반복하여 하나의 열로 합친다(병합한다). 한쪽 열이 비면 나머지는 비교하지 않고 그대로 출력한다. 비교 횟수는 몇 회인가?
  5. 이진 힙을, 루트를 a[0]으로 하는 배열 a[0], a[1], a[2], …에 위쪽 단부터 차례로 왼쪽부터 채워 저장한다. a[4]의 자식과 부모로 올바른 것은?