💡코드 없는 알고리즘과 데이터 구조을 바탕으로 작성된 글입니다.
데이터를 정렬하면 알고리즘이 중복 데이터를 빠르게 식별하거나 필요한 데이터를 매우 빠르게 찾을 수 있다.
시간 복잡도 : O(n^2)
단순하지만, 느리고 비효율적이다.
시간 복잡도 : O(n^2)
선택 정렬은 선형 탐색을 응용한 알고리즘으로 중첩 반복문을 사용하여 구현한다. 또한, 배열에서 가장 작은 수를 찾기 위해 선형 탐색을 하기 때문에 요소의 개수가 늘어날수록 실행 속도는 느려진다.
버블 정렬과 같은 시간 복잡도를 가지지만 버블 정렬보다는 조금 더 나은 성능을 제공한다.
시간 복잡도 : 최선 - O(n), 평균 - O(n^2), 최악 - O(n^2)
널리 사용되는 훌륭한 정렬 알고리즘이며 선택 정렬보다 더 효율적인 정렬 알고리즘이다.
시간 복잡도 : 최선 - O(n), 평균 - O(n^1.5), 최악 - O(n^2)
삽입 정렬을 더 효율적으로 실행하는 알고리즘으로 다음과 같이 동작한다.
시간 복잡도 : O(nlogn)
데이터를 반으로 나누어 정렬을 수행하는 알고리즘으로 분할 정복이라 한다.
재귀 함수를 사용하여 구현하며, 데이터를 계속 나누기 때문에 재귀 횟수에 따라 시간 복잡도가 달라지나 일반적으로 O(nlogn)로 나타난다.
시간 복잡도 : O(nlogn)
퀵 정렬도 병합 정렬처럼 분할 정복 방식을 사용한다.
중요한 것은 퀵 정렬에서는 피벗(Pivot)의 개념을 사용하는데 피벗은 이동의 기준이 된다.
일반적으로 피벗은 가장 맨 왼쪽에 있는 요소나 맨 오른쪽에 있는 요소를 선택해서 사용한다.
시간 복잡도 : O(nlogn)
최대 힙과 반대로 자식 노드와 부모 노드의 값을 비교해 더 작은 쪽을 루트 노트에 가깝도록 위치시키면 된다.
시간 복잡도 : 평균 - O(n+n^2/m+m), 최악 - O(n^2) (m은 버킷 수)
이미지 출처 : 위키피디아-버킷정렬
버킷 정렬은 요소들을 어떤 기준이 있는 버킷에 나눠 넣은 후 다음 과정으로 정렬을 수행한다.
이때의 기준은 보통 10진수의 자리수이다.
시간 복잡도 : 최악 - O(mn) (m은 요소의 자리수)
특정 기준이 정해져 있는 버킷 정렬과 달리 기수 정렬의 기준은 바로 요솟값의 특정 자릿수끼리 비교해서 정렬한다는 것이다.