[CS50] 알고리즘 - 선택 정렬

TIL

정렬된 배열이 정렬되지 않은 배열보다 탐색하기 쉽다.

 

선택 정렬(Selection Sort)은 배열에서 가장 작은 값을 찾아 첫 번째 위치의 값과 교환하는 방식의 정렬이다.

교환 횟수를 최소화하는 반면 각 자료를 비교하는 횟수는 증가한다.

동작 원리

정렬되지 않은 숫자들을 오름차순으로 정렬해보자.

6 3 8 5 2 7 4 1

1단계:

  • 가장 작은 값인 1을 찾는다
  • 첫 번째 값인 6과 교환한다
  • 결과: 1 3 8 5 2 7 4 6

2단계:

  • 정렬된 1을 제외하고 두 번째부터 가장 작은 값을 찾는다
  • 가장 작은 값인 2를 두 번째 값인 3과 교환한다
  • 결과: 1 2 8 5 3 7 4 6

3단계 이후:

  • 이 과정을 더 이상 교환이 일어나지 않을 때까지 반복한다
  • 최종 결과: 1 2 3 4 5 6 7 8

의사 코드:

For i from 0 to n-1
        Find smallest item between i'th item and last item
        Swap smallest item with i'th item

 

시간 복잡도

두 번의 루프를 사용한다:

  • 바깥 루프: 숫자들을 처음부터 순서대로 방문
  • 안쪽 루프: 가장 작은 값 찾기

버블 정렬과 동일하게:

  • 상한 (최악의 경우): O(n²)
  • 하한 (최선의 경우): Ω(n²)

 

연습 문제

Q. 선택 정렬을 좀 더 효율적으로 어떻게 바꿀 수 있을까?

양방향 선택 정렬:

각 반복 실행에서 최솟값과 최댓값을 동시에 찾아 배열의 양 끝으로 이동시킨다.

개선된 알고리즘:

For i from 0 to n/2
        Find smallest item between i'th item and (n-i)'th item
        Find largest item between i'th item and (n-i)'th item
        Swap smallest item with i'th item
        Swap largest item with (n-i)'th item

장점:

  • 한 번의 순회에서 양쪽 끝을 동시에 정렬
  • 외부 루프 반복 횟수가 절반으로 감소
  • 여전히 O(n²)이지만 실제 비교 횟수는 약 절반

단점:

  • 코드 복잡도 증가
  • 시간 복잡도는 여전히 O(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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 알고리즘 - 선택 정렬
상단으로

티스토리툴바