Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Collaborative filtering
- 배깅
- Oracle ASSM
- 데이터분석
- Spark jdbc parallel read
- 추천시스템
- BFS
- Decision Tree
- Oracle 논리적 저장 구조
- Linux
- 의사결정나무
- git stash
- 랜덤포레스트
- git 기본명령어
- 오라클 데이터 처리방식
- 리눅스 환경변수
- CF
- 통계분석
- Python
- 알고리즘
- airflow 정리
- enq: FB - contention
- SQL
- 앙상블
- git init
- 데이터 분석
- 네트워크
- Spark Data Read
- eda
- Spark 튜닝
Archives
- Today
- Total
[Alex] 데이터 장인의 블로그
[알고리즘] 1) 선택 정렬 알고리즘 본문
항상 알고리즘을 공부해야지 맘잡고 책과 영상을 시작하게 되면 맞이하는 과목(?)이 있다.
바로 정렬이다. 이번 기회에 블로그에 정리하면서 복습하려고 한다.
주로 Google 선생과 Youtube 선생의 소스에서 자료를 얻지만 대표적으로는 [동빈나] 선생님, https://www.daleseo.com/ 블로그 자료를 주로 참고하였다는 것을 미리 밝힌다.
'정렬'의 개념은 우리가 흔히 말하는 '오름차순' 이나 '내림차순'으로 데이터를 정리하는 방법들을 정의한다.
선택 정렬 알고리즘
배열 내 여러 인자 값이나 데이터가 있다고 가정해보자.
- 첫번째 값을 '기준'으로 두고 두번째, 세번째 값과 비교를 진행한다.
- 이때 뒤(N번째)의 값이 '기준'되는 값보다 작다면, 기준값과 자리를 바꾼다.
이 개념을 도입하여 코드를 짜야 한다면, 그것은 바로 '선택' 정렬 알고리즘을 사용한다고 할 수 있다.
해당 시간 복잡도는 O(N^2)
설명
1. 0번째 값을 기준으로 두고 1번째 값부터 차례차례 비교하다 보니 3번째 값이 더 작은 것을 확인, 자리를 바꾼다. (스와핑)
i
[3, 4, 5, 1, 2]
m
2. 이번에는 1번째 값을 기준으로 두고 2번째 값부터 차례차례 비교하다 보니 4번째 값이 더 작은 것을 확인, 자리를 바꾼다.
i
[1, 4, 5, 3, 2]
m
이런식으로 하나씩 최소 값 비교를 통해 문제를 해결해나가는 방식을 '선택 정렬 알고리즘'이라 한다.
파이썬 구현
def selection_sort(arr):
for i in range(len(arr) - 1):
min_idx = i
for j in range(i + 1, len(arr)):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] BFS (너비 우선 탐색) / DFS (깊이 우선 탐색) (0) | 2022.07.02 |
---|---|
[알고리즘] 5) 병합 정렬 알고리즘 (0) | 2022.06.26 |
[알고리즘] 4) 퀵 정렬 알고리즘 (0) | 2022.06.26 |
[알고리즘] 3) 삽입 정렬 알고리즘 (0) | 2022.06.26 |
[알고리즘] 2) 버블 정렬 알고리즘 (0) | 2022.06.26 |
Comments