2월 19일 - 정렬알고리즘 (1)

Yullgiii·2024년 2월 19일
0
post-thumbnail

Quick Sort vs Merge Sort TIL

Quick Sort

Quick Sort는 분할 정복 알고리즘의 일종이다. 평균 시간 복잡도는 (O(n \log n))이지만, 최악의 경우 시간 복잡도는 (O(n^2))에 달할 수 있다. 이 정렬 방식은 Pivot을 선택하고, Pivot보다 작은 요소는 Pivot의 왼쪽, 큰 요소는 오른쪽으로 분할하여 정렬을 수행한다. 추가 메모리가 거의 필요 없는 in-place 정렬 방식이며, Pivot 선택 방법에 따라 성능이 크게 달라질 수 있다.

특징

  • 분할 정복 방식을 사용한다.
  • 평균 시간 복잡도는 (O(n \log n))이며, 최악의 경우 (O(n^2))이다.
  • Pivot을 기준으로 배열을 분할하여 정렬한다.
  • 추가 메모리 사용이 거의 필요 없는 in-place 정렬이다.
  • Pivot의 선택에 따라 성능 차이가 크다.

개선 방법

  • Pivot 선택 개선: Pivot을 무작위로 선택하거나, 배열의 첫 번째, 마지막, 중간값 중 중간값(median-of-three)을 Pivot으로 선택함으로써 최악의 성능을 피할 수 있다.
  • 3-way partitioning: 동일한 키 값을 가진 요소들을 효율적으로 처리하여 성능을 개선한다.

Merge Sort

Merge Sort 역시 분할 정복 알고리즘의 일종이다. 모든 경우에 대해 시간 복잡도는 (O(n \log n))이며, 배열을 반으로 나누고, 각 부분을 재귀적으로 정렬한 다음, 두 부분을 병합하는 방식으로 작동한다. 정렬 과정에서 추가 메모리가 필요한 out-of-place 정렬 방식이며, Stable 정렬 방식이다.

특징

  • 분할 정복 알고리즘을 사용한다.
  • 모든 경우에 대해 시간 복잡도는 (O(n \log n))이다.
  • 배열을 반으로 나누고 재귀적으로 정렬한 후 병합한다.
  • 추가 메모리가 필요한 out-of-place 정렬이다.
  • Stable 정렬 방식이다.

Quick Sort에서 (O(n^2))이 걸리는 예시 및 개선 방법

예시

이미 정렬된 배열에서 최소값이나 최대값을 Pivot으로 선택할 경우, Quick Sort의 성능은 최악의 시간 복잡도인 (O(n^2))에 도달할 수 있다.

개선 방법

  • Pivot 선택 개선: Pivot 선택을 개선하기 위해 배열의 첫 번째, 마지막, 중간값 중 중간값을 Pivot으로 선택하는 median-of-three 방식을 사용할 수 있다. 또한, Pivot을 무작위로 선택하는 방법도 성능을 개선하는 데 도움이 될 수 있다.
  • 3-way partitioning: Pivot과 동일한 값을 가진 요소들을 효율적으로 처리하기 위해 3-way partitioning을 사용함으로써, 동일한 값들이 많은 배열에서의 성능 저하를 방지할 수 있다.
profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글