※ 여기서 Stable, Unstable이란 동일한 key값에 대하여 정렬 후 순서가 바뀌면 Unstable, 바뀌지 않으면 Stable

BubbleSort
- 좌우 대소비교를 하면서 정렬
- 시간복잡도: O(N^2) - 평균의 경우
- Stable한 정렬
Bubblesort 정렬과정
- List = [6, 8, 1, 3, 10, 11]
- 진행과정
[6, 8, 1, 3, 10, 11] -> [6, 1, 8, 3, 10, 11] -> [6, 1, 3, 8, 10, 11] -> [6, 1, 3, 8, 10, 11]
[6, 1, 3, 8, 10, 11] -> [1, 6, 3, 8, 10, 11 ] -> [1, 3, 6, 8, 10, 11] -> [ 1, 3, 6, 8, 10, 11 ]
.
.
.
위 과정 반복
-> [ 1, 3, 6 , 8, 10, 11 ]
SelectionSort
- 리스트 맨 앞의 원소가 정렬되어 있다고 가정 하에 정렬 진행
- 시간 복잡도: O(N^2) - 평균의 경우
- Unstable한 정렬
Selectionsort 정렬과정
- List: [3, 7, 1, 5, 10]
- 진행과정 ( 파란 숫자는 가정되어 있음을 나타냄)
[3, 7, 1, 5, 10] -> [ 3, 7, 1, 5, 10] -> [1, 7, 3, 5, 10]
[1, 7, 3, 5, 10] -> [1, 7, 3, 5, 10] -> [1, 3, 7, 5, 10]
[1, 3, 7, 5, 10] -> [1, 3, 7, 5, 10] -> [1, 3, 5, 7, 10]
.
.
.
위 과정 반복
-> [ 1, 3, 5 , 7, 10 ]
InsertionSort
- 정렬의 범위를 한 칸씩 늘려가면서 정렬 진행, 진행방향: 자신의 왼쪽 (즉, 인덱스가 적어지는 방향으로 sorting)
- Selectionsort와 마찬가지로 첫번째는 이미 정렬되어 있다는 가정 하에 1번 인덱스부터 정렬 진행
- 시간복잡도: O(N^2) - 평균의 경우
- 기존의 정렬된 위치가 새로운 인덱스로 인해서 바뀔 수 있음
- Stable한 정렬
Insertionsort 정렬과정
- List: [ 5, 11, 8, 9, 1, 3]
- 진행과정
(이전에 정렬이 되었더라도 그 뒤에 더 작은 수가 존재 할 수 있어서 정렬이 끝나지 않은 이상 정렬 완료된 게 아님)
[ 5, 11, 8, 9, 1, 3] -> [5, 8, 11, 9, 1, 3] -> [5, 8, 9, 11, 1, 3] -> [1, 5, 8, 9, 11, 3]
-> [1, 3, 5, 8, 9, 11] (정렬완료)
QuickSort + Partition
- 재귀적 구조 (Recursive)
- Partition이란 함수를 사용해 Pivot값을 설정 (맨 처음의 경우, Pivot은 맨 뒤의 인덱스 값으로 설정)
- Pivot 을 정한 후, Pivot 의 왼쪽 부분과 오른쪽 부분을 나눠서 정렬
- Unstable한 정렬
- 시간복잡도는 2가지로 나뉨
- Worst인 경우: O(N^2) (모든 원소가 동일한 경우, 리스트가 불균등하게 나눠지는 경우)
- Average, Best : O(N log N)
※ Quicksort visualization

Python Code for Sorting
※ 코드는 강의시간과 책에서 쓴 pseudocode와 code 에서 참조 (책: 쉽게 풀어쓴 자료구조 with 파이썬)
Time Complexity
다양한 알고리즘들의 시간복잡도
(삽입정렬: Insertionsort / 선택정렬: Selectionsort)

Visualization
Bubblesort, Insertionsort visualization
- https://www.youtube.com/watch?v=TZRWRjq2CAg&t=99s
Quicksort visualization
- https://www.youtube.com/watch?v=vxENKlcs2Tw&t=2s
설명 잘하시는 유튜브 : https://www.youtube.com/@abdul_bari
Abdul Bari
I have started this channel to help Students Community to learn difficult topics, from computer science, with a simple and detailed explanation. I have been teaching some computer science subjects and Programming Languages for a long time and also been wor
www.youtube.com
(Caution: India English is included.....)
'Python > 자료구조, 알고리즘' 카테고리의 다른 글
| 자료구조, 알고리즘) Graph - About Graph, DFS, BFS (1) | 2024.05.22 |
|---|---|
| 자료구조, 알고리즘) Sorting - Shellsort, Mergesort, Heapsort, Radixsort (1) | 2024.05.17 |
| 자료구조) Binary Search Tree (6) | 2023.12.05 |
| 자료구조) Binary Tree (4) | 2023.11.28 |
| 자료구조) Tree의 기본 개념 (3) | 2023.11.28 |