[CS50] 알고리즘 - 정렬 알고리즘의 실행시간

TIL

알고리즘 실행시간 비교

실행시간의 상한

  • O(n²): 선택 정렬, 버블 정렬
  • O(n log n)
  • O(n): 선형 검색
  • O(log n): 이진 검색
  • O(1)

 

실행시간의 하한 (개선 전)

  • Ω(n²): 선택 정렬, 버블 정렬
  • Ω(n log n)
  • Ω(n)
  • Ω(log n)
  • Ω(1): 선형 검색, 이진 검색

 

샌프란시스코 대학교 컴퓨터 과학 부서의 비교 정렬 시각화 도구

 

버블 정렬 개선

정렬이 모두 되어 있는 리스트가 주어진다면 어떨까?

 

원래의 의사 코드

Repeat n-1 times
        For i from 0 to n-2
                If i'th and i+1'th elements out of order
                        Swap them
  • 실행시간의 하한: Ω(n²)
  • 문제: 이미 정렬되어 있어도 모든 비교를 수행

 

안쪽 루프에서 교환이 하나도 일어나지 않는다면 이미 정렬이 완료된 상태다.

따라서 바깥쪽 루프를 '교환이 일어나지 않을 때'까지만 수행하도록 변경한다.

 

개선된 의사 코드

Repeat until no swaps
        For i from 0 to n-2
                If i'th and i+1'th elements out of order
                        Swap them
  • 실행시간의 하한: Ω(n)
  • 정렬된 배열에서는 한 번의 순회만 필요

이렇게 상황에 따라 버블 정렬이 선택 정렬보다 더 빠를 수 있다.

 

실행시간의 하한 (개선 후)

  • Ω(n²): 선택 정렬
  • Ω(n log n)
  • Ω(n): 버블 정렬
  • Ω(log n)
  • Ω(1): 선형 검색, 이진 검색

 

연습 문제

Q. 선택 정렬의 실행 시간 하한도 버블 정렬처럼 더 단축시킬 수 있을까?
불가능하다.
선택 정렬은 정렬 상태와 관계없이 항상 Ω(n²)의 시간이 소요된다.

 

선택 정렬의 특성:

  1. 매 단계에서 전체 배열을 탐색하여 최솟값을 찾음
  2. 이미 정렬되어 있어도 최솟값을 찾는 과정은 생략할 수 없음
  3. 교환 여부를 미리 알 수 없어 조기 종료 불가능

버블 정렬과의 차이:

  • 버블 정렬: 교환 발생 여부로 정렬 완료를 판단 가능
  • 선택 정렬: 최솟값 찾기는 항상 필요, 정렬 완료 여부와 무관

 

결론:
선택 정렬의 시간 복잡도는 최선/최악 모두 Θ(n²)이며, 개선이 불가능하다.

'TIL' 카테고리의 다른 글

[CS50] 알고리즘 - 병합 정렬  (0) 2025.11.06
[CS50] 알고리즘 - 재귀  (0) 2025.11.06
[CS50] 알고리즘 - 선택 정렬  (0) 2025.11.06
[CS50] 알고리즘 - 버블 정렬  (0) 2025.11.06
[CS50] 알고리즘 - 선형 검색  (0) 2025.11.06
'TIL' 카테고리의 다른 글
  • [CS50] 알고리즘 - 병합 정렬
  • [CS50] 알고리즘 - 재귀
  • [CS50] 알고리즘 - 선택 정렬
  • [CS50] 알고리즘 - 버블 정렬
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C
    cs50
    문자열
    useState
    알고리즘
    emotion diary
    App Router
    ai 감성 일기장
    트러블 슈팅
    인터페이스
    memory
    javascript
    Pages Router
    Spa
    배열
    타입 좁히기
    generic
    페이지 라우터
    클래스
    앱 라우터
    함수 타입
    CS
    자료구조
    제네릭
    algorithm
    Next.js
    Trouble Shooting
    typescript
    바닐라 자바스크립트
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 알고리즘 - 정렬 알고리즘의 실행시간
상단으로

티스토리툴바