내가 구현한 방법과 정식 알고리즘을 비교해보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# selection
def selection_sort_not_good(a):
# 이 방법은 swap을 원래 방법보다 많이 하게 된다. 또한 insertion에 가까운 방법이다. n = len(a)
for i in range(0, n - 1):
for j in range(i + 1, n):
if a[j] < a[i]:
a[i], a[j] = a[j], a[i]
def selection_sort(a):
n = len(a)
for i in range(0, n - 1):
min_idx = i
for j in range(i + 1, n):
if a[min_idx] > a[j]: # i 뒤의 애들을 전부 흝고 그 중 하나를 골라서 swap
min_idx = j
a[i], a[min_idx] = a[min_idx], a[i] # swap
|
cs |
원래의 방법은 기준이 되는 것 뒤의 애들을 한번 다 흝고 그 중 가장 작은 index와 swap하는 방식이지만 ,
시도하려던 방식은 기준위치의 값보다 작은 값을 발견하면 그대로 swap해서 불필요한 연산을 하게되어 시간이 더 많이 걸린다. 또한 insertion방식에 더 유사한 방법이라고 볼 수도 있다.
'Algorithm > 알고리즘 정리' 카테고리의 다른 글
binary search (0) | 2020.07.17 |
---|---|
bubble sort(optimized) (0) | 2020.07.16 |
quick sort (기본: 맨 끝을 pivot으로) (0) | 2020.07.16 |
merge sort (0) | 2020.07.13 |
insertion sort 이해해보기 (0) | 2020.07.13 |