250x250
Notice
Recent Posts
Recent Comments
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Find
- double quote
- atlas
- await
- til
- sequelize
- flutter
- https
- MYSQL
- css
- jsonwebtoken
- single quote
- Express
- TailwindCSS
- Node.js
- certbot
- findByIdAndDelete
- nginx
- RDS
- AWS
- async
- mongodb
- moment
- clipBehavior
- mongoose
- TypeScript
- wil
- Nodejs
- JavaScript
- EC2
Link
Archives
기억 휘발 방지소
삽입정렬 (Insertion Sort) 본문
728x90
반응형
📌 삽입정렬 (Insertion Sort)
배열에서 현재 자신의 위치보다 앞에 이미 정렬된 부분과 비교하여 자신의 위치를 찾아 삽입하는 정렬 방법이다.
👉 과정
Loop 1
[5, 3, 8, 1, 2, 7]
current_idx: 1
current_val: 3
arr[current_idx - 1]: 5
인덱스 1번에 5삽입
[5, 5, 8, 1, 2, 7]
current_idx: 0
current_val: 3
arr[current_idx - 1]: 5
current_idx가 0이 됐기 때문에 while문에 걸리지 않고 인덱스 0에 current_val을 삽입
[3, 5, 8, 1, 2, 7]
current_idx: 0
current_val: 3
arr[current_idx - 1]: 5
Loop 2
[3, 5, 8, 1, 2, 7]
current_idx: 2
current_val: 8
arr[current_idx - 1]: 5
3, 5, 8은 이미 정렬되어 있으므로 그냥 넘어간다.
Loop 3
[3, 5, 8, 1, 2, 7]
current_idx: 3
current_val: 1
arr[current_idx - 1]: 8
while문 조건에 걸린다.
8이 1보다 크므로 1의 자리인 인덱스 3에 8을 삽입하고 current_idx를 1 감소
[3, 5, 8, 8, 2, 7]
current_idx: 2
current_val: 1
arr[current_idx - 1]: 5
여기서도 while문 조건에 걸린다.
인덱스 2에 5를 삽입하고 current_idx는 1 감소
[3, 5, 5, 8, 2, 7]
current_idx: 1
current_val: 1
arr[current_idx - 1]: 3
while문 조건에 걸리고 인덱스 1에 3을 삽입하고 current_idx는 1 감소
[3, 3, 5, 8, 2, 7]
current_idx: 0
current_val: 1
arr[current_idx - 1]: 5
while문 조건에 걸리지 않아 인덱스 1에 current_val인 1을 삽입
[1, 3, 5, 8, 2, 7]
current_idx: 0
current_val: 1
arr[current_idx - 1]: 5
Loop 4
[1, 3, 5, 8, 2, 7]
current_idx: 4
current_val: 2
arr[current_idx - 1]: 8
8과 2를 비교
8이 더 크므로 2번 자리인 인덱스 4에 8을 삽입
[1, 3, 5, 8, 8, 7]
current_idx: 3
current_val: 2
arr[current_idx - 1]: 8
current_val인 2와 5를 비교
5가 더 크기 때문에 인덱스 3에 5를 삽입
[1, 3, 5, 5, 8, 7]
current_idx: 2
current_val: 2
arr[current_idx - 1]: 5
current_val인 2와 3을 비교
3이 더 크기 때문에 인덱스 2에 3을 삽입
[1, 3, 3, 5, 8, 7]
current_idx: 1
current_val: 2
arr[current_idx - 1]: 1
current_val인 2가 1보다는 크기 때문에 루프는 끝이나고 인덱스 1에 2를 삽입
[1, 2, 3, 5, 8, 7]
current_idx: 1
current_val: 2
arr[current_idx - 1]: 1
루프 종료
Loop 5
[1, 2, 3, 5, 8, 7]
current_idx: 5
current_val: 7
arr[current_idx - 1]: 8
8과 7을 비교
8이 7보다 크므로 7의 자리인 인덱스 5에 8을 삽입
[1, 2, 3, 5, 8, 8]
current_idx: 4
current_val: 7
arr[current_idx - 1]: 5
current_val인 7과 5를 비교
7이 더 크기 때문에 while문 조건에 만족하지 않는다.
루프를 끝냄
[1, 2, 3, 5, 7, 8]
current_idx: 4
current_val: 7
arr[current_idx - 1]: 5
인덱스 4에 7을 삽입
for loop 종료하면서 정렬 끝
👉 구현
def insertion_sort(arr):
for i in range(1, len(arr)):
current_val = arr[i]
current_idx = i
while current_idx > 0 and current_val < arr[current_idx - 1]:
arr[current_idx] = arr[current_idx - 1]
current_idx -= 1
arr[current_idx] = current_val
return arr
728x90
반응형
'Algorithm' 카테고리의 다른 글
유클리드 알고리즘 (Euclidean Algorithm) (0) | 2022.09.07 |
---|---|
선택정렬 (Selection Sort) (0) | 2022.07.25 |
버블정렬 (Bubble Sort) (0) | 2022.07.25 |
진수변환 (0) | 2022.07.23 |
약수 구하기 (0) | 2022.07.22 |