본문 바로가기
AI 외부 활동🧠/커널아케데미 부트캠프

[핵심] 컴퓨터공학개론 9단원 – 자료구조와 알고리즘: 정렬(Sorting)

by Sports Entrepreneur 2025. 6. 27.

9단원 – 자료구조와 알고리즘: 정렬(Sorting)

1. 정렬이란?

정렬(Sorting)이란, 주어진 데이터를 일정한 기준(오름차순, 내림차순 등)에 따라 순서를 재배열하는 작업을 의미한다. 다양한 알고리즘이 존재하며, 시간 복잡도와 공간 복잡도, 안정성 등에 따라 각각의 특징이 있다.

정렬은 검색, 데이터 분석, 시각화 등 다양한 응용 분야에서 필수적인 전처리 단계이다.


2. 정렬 알고리즘 분류

정렬 방식내부/외부정렬 기준특징
버블 정렬 내부 정렬 인접 비교 가장 단순, 느림
선택 정렬 내부 정렬 최소값 선택 데이터 이동 적음
삽입 정렬 내부 정렬 위치 삽입 거의 정렬된 경우 효율적
퀵 정렬 내부 정렬 피벗 기반 평균 속도 빠름, 불안정
병합 정렬 내부 정렬 분할 후 병합 안정적, 추가 메모리 사용
힙 정렬 내부 정렬 힙 자료구조 빠르고 메모리 효율적
기수 정렬 외부 정렬 자릿수 기준 숫자나 문자열 정렬에 강점
 

3. 주요 정렬 알고리즘 설명

① 버블 정렬 (Bubble Sort)

  • 인접한 두 값을 비교하여 위치를 바꾸는 방식
  • 반복문을 통해 가장 큰 값을 끝으로 보내는 구조
  • 시간 복잡도: O(n²)
  • 코드 예시 (Python):
for i in range(len(arr)):
    for j in range(len(arr)-i-1):
        if arr[j] > arr[j+1]:
            arr[j], arr[j+1] = arr[j+1], arr[j]

② 선택 정렬 (Selection Sort)

  • 매 반복마다 최소값을 찾아 맨 앞으로 이동
  • 교환 횟수 적음 (n번)
  • 시간 복잡도: O(n²)

③ 삽입 정렬 (Insertion Sort)

  • 정렬된 리스트에 새로운 요소를 삽입하면서 정렬
  • 거의 정렬된 데이터에 매우 빠름
  • 시간 복잡도: O(n²)

④ 퀵 정렬 (Quick Sort)

  • 피벗을 기준으로 좌우로 분할하며 정렬
  • 평균 시간 복잡도: O(n log n)
  • 최악의 경우: O(n²) (데이터가 이미 정렬된 경우)

⑤ 병합 정렬 (Merge Sort)

  • 데이터를 반으로 나누고 다시 합치며 정렬
  • 안정 정렬
  • 시간 복잡도: O(n log n)
  • 공간 복잡도: O(n) (임시 배열 필요)

⑥ 힙 정렬 (Heap Sort)

  • 최대 힙 또는 최소 힙을 사용하여 정렬
  • 시간 복잡도: O(n log n)
  • 불안정 정렬

⑦ 기수 정렬 (Radix Sort)

  • 자릿수를 기준으로 정렬
  • 비교 기반 아님 → 문자열, 숫자에 강점
  • 시간 복잡도: O(kn) (k = 자릿수)

4. 정렬 알고리즘 비교 요약

알고리즘평균 시간 복잡도공간 복잡도안정성특징
버블 정렬 O(n²) O(1) O 구현 쉬움, 매우 느림
선택 정렬 O(n²) O(1) X 교환 적음
삽입 정렬 O(n²) O(1) O 거의 정렬된 경우 효율적
퀵 정렬 O(n log n) O(log n) X 평균 매우 빠름
병합 정렬 O(n log n) O(n) O 안정적, 메모리 사용
힙 정렬 O(n log n) O(1) X 공간 효율적
기수 정렬 O(kn) O(n+k) O 숫자, 문자열 특화
 

5. 실습 예시 (퀵 정렬)

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = [x for x in arr[1:] if x <= pivot]
    right = [x for x in arr[1:] if x > pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)

nums = [5, 3, 8, 4, 2]
print(quick_sort(nums))

6. 학습 포인트 요약

  • 정렬은 알고리즘의 기초 중의 기초로, 모든 문제 해결의 출발점이다.
  • 다양한 정렬 방식의 특징과 시간 복잡도, 안정성을 이해해야 한다.
  • 실제 문제 풀이에서는 입력 데이터의 특성에 따라 정렬 알고리즘을 적절히 선택해야 한다.
  • 정렬은 코딩 테스트, 면접, 실무 데이터 처리 등 모든 개발 과정에서 활용된다.