기록은 기억을 이기고 시간보다 오래 남는다.

Computer Science/Algorithm

다양한 정렬 알고리즘 이해 : 비교, 성능, 분석 with JS

준_준 2024. 5. 9. 21:30

다양한 정렬 알고리즘과 그 성능 비교


정렬 알고리즘은 데이터를 특정 순서로 배열하는 프로세스입니다. 이 글에서는 다양한 정렬 알고리즘의 특징, 성능, 그리고 효율적인 사용 시나리오를 비교하여 살펴보겠습니다.


정렬 알고리즘의 기본

정렬은 컴퓨터 과학에서 가장 기본적인 문제 중 하나로, 정렬 기준은 사용자가 설정할 수 있습니다. 정렬 알고리즘은 크게 비교식 정렬과 분산식 정렬로 나눌 수 있습니다. 대부분의 프로그래밍 언어는 기본적인 정렬 함수를 내장하고 있습니다.


비교식 정렬 알고리즘

비교식 정렬은 요소들을 직접 비교하여 정렬 순서를 결정합니다.

  • 버블 정렬: 인접한 요소끼리 비교하고 교환하는 방식으로, 간단하지만 비효율적인 O(n^2)의 시간 복잡도를 가집니다.
  • 선택 정렬: 가장 작은 (또는 가장 큰) 요소를 선택하여 알맞은 위치로 이동시키는 방식으로, 역시 O(n^2)의 시간 복잡도를 가집니다.
  • 삽입 정렬: 각 요소를 이미 정렬된 배열의 적절한 위치에 삽입하는 방식으로, 최선의 경우 O(n)의 시간 복잡도를 가집니다.

분산식 정렬 알고리즘

분산식 정렬은 요소를 여러 그룹으로 분할하여 각 그룹을 따로 정렬하는 방식입니다.

  • 합병 정렬: 분할 정복 기법을 이용하여 배열을 반으로 나누고, 각 부분을 정렬한 후 합치는 안정적인 정렬 방법으로, 모든 경우에 O(n log n)의 시간 복잡도를 가집니다.
  • 퀵 정렬: 피벗을 기준으로 배열을 분할하고, 각 부분을 재귀적으로 정렬하는 방법으로, 평균적으로 O(n log n)의 시간 복잡도를 가지지만, 최악의 경우 O(n^2)이 될 수 있습니다.

JS의 sort 함수

대부분의 프로그래밍 언어는 배열 또는 리스트를 정렬하는 내장 sort 함수를 제공합니다. 이 함수는 보통 효율적인 정렬 알고리즘을 내부적으로 구현하여 최적의 성능을 제공합니다.

let numbers = [10, 5, 3, 8, 2, 6, 4, 7, 9, 1];
numbers.sort((a, b) => a - b); // 오름차순 정렬
numbers.sort((a, b) => b - a); // 내림차순 정렬
반응형