모든 글은 다음 블로그를 참고하여 작성하였습니다.
https://gyoogle.dev/blog/
Bubble Sort
Java Code (Ascending)
1 |
|
GIF
시간 복잡도
- O(n^2)
공간복잡도
- O(n)
장점
-
구현이 매우 간단하고, 소스코드가 직관적이다.
-
정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않다. => 제자리 정렬(in-place sorting)
-
안정 정렬(Stable Sort) 이다.
단점
-
시간복잡도가 최악, 최선, 평균 모두 O(n^2)으로, 굉장히 비효율적이다.
-
정렬 돼있지 않은 원소가 정렬 됐을때의 자리로 가기 위해서, 교환 연산(swap)이 많이 일어나게 된다.
Selection Sort
Java Code (Ascending)
1 |
|
GIF
시간 복잡도
- O(n^2)
공간복잡도
- O(n)
장점
-
Bubble sort와 마찬가지로 알고리즘이 단순하다.
-
정렬을 위한 비교 횟수는 많지만, Bubble Sort에 비해 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료상태에서 비교적 효율적이다.
-
Bubble Sort와 마찬가지로 정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다. => 제자리 정렬(in-place sorting)
단점
-
시간복잡도가 O(n^2)으로, 비효율적이다.
-
불안정 정렬(Unstable Sort) 이다.
Insertion Sort
Java Code (Ascending)
1 |
|
GIF
시간 복잡도
- O(n^2), 최선의 경우 : O(N)
공간복잡도
- O(n)
장점
- 알고리즘이 단순하다.
- 대부분의 원소가 이미 정렬되어 있는 경우, 매우 효율적일 수 있다.
- 정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다. => 제자리 정렬(in-place sorting)
-
안정 정렬(Stable Sort) 이다.
- Selection Sort나 Bubble Sort과 같은 O(n^2) 알고리즘에 비교하여 상대적으로 빠르다.
단점
-
평균과 최악의 시간복잡도가 O(n^2)으로 비효율적이다.
-
Bubble Sort와 Selection Sort와 마찬가지로, 배열의 길이가 길어질수록 비효율적이다.
Quick Sort
Java Code (Ascending)
1 |
|
1 |
|
GIF
시간 복잡도
- 평균, 최선의 경우 : O(nlog₂n), 비교 횟수 : log₂n
- 최악의 경우 : O(n^2), 비교 횟수 : n
공간복잡도
- O(n)
장점
- 불필요한 데이터의 이동을 줄이고 먼 거리의 데이터를 교환할 뿐만 아니라, 한 번 결정된 피벗들이 추후 연산에서 제외되는 특성 때문에, 시간 복잡도가 O(nlog₂n)를 가지는 다른 정렬 알고리즘과 비교했을 때도 가장 빠르다.
- 정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다.
단점
- 불안정 정렬(Unstable Sort) 이다.
- 정렬된 배열에 대해서는 Quick Sort의 불균형 분할에 의해 오히려 수행시간이 더 많이 걸린다.
Merge Sort
Java Code (Ascending)
1 |
|
1 |
|
시간 복잡도
- O(nlogn)