일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 컴퓨터비전
- WebOS
- SQL
- 프로그래머스
- 어렵다
- level1
- 대학원일기
- 컨트리뷰톤
- 자바
- androidstudio
- Github
- 다시풀기
- 대학원
- D3
- 내휴학생활중의아주큰일
- git
- 파이썬
- java
- Matrix Factorization
- level4
- 안드로이드스튜디오
- build
- LEVEL2
- MSBuild
- py
- 휴학
- BFS
- Python
- SWEA
- level3
Archives
- Today
- Total
bit가 눈 앞에서 왔다갔다
Py) 삽입정렬 Insertion Sort 본문
- 정렬되어 있는 리스트에 새로운 값을 적절한 위치에 삽입하는 과정 반복
- 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누어서 사용하는 것으로 생각
- 안정된 정렬, 데이터 수가 적을 경우와 이미 정렬되어 있는 경우 유리
- 복잡도 분석:
- 삽입정렬 외부루프 n-1번 실행, 각 단계에서 1번의 비교와 2번의 이동이 이루어짐. 총 비교횟수 n-1번, 총 이동횟수 2(n-1)번. 따라서 최선의 경우 O(n)
- 입력 자료가 역순일 경우는 최악의 경우. 전부 한 칸씩 이동 O(n^2)
알고리즘
- 인덱스 0은 이미 정렬되었다고 생각, 인덱스 1부터 시작
- 현재 정렬된 배열은 i-1까지 이므로 j(삽입하고자 하는 원소 위치)를 i-1부터 역순으로 진행
- j가 왼쪽 원소보다 작을 경우 swap
array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
#왼쪽으로 이동하면서 바꿔준다
for i in range(1, len(array)): #인덱스 0은 이미 정렬되었다고 생각, 인덱스 1부터
for j in range(i, 0, -1): #range -> i 부터 1까지 1씩 감소하며 진행
#j는 삽입하고자 하는 원소의 위치
#한칸씩 왼쪽으로
if array[j] < array[j-1]:
array[j],array[j-1] = array[j-1], array[j]
#j가 그 왼쪽 원소보다 크거나 같으면 정지
else:
break
print(array)
반응형
'Algorithm > Concept' 카테고리의 다른 글
Py) 계수정렬 Counting Sort (0) | 2021.02.17 |
---|---|
Py) 퀵정렬 Quick Sort (0) | 2021.02.17 |
Py) 선택정렬 Selection Sort (0) | 2021.02.17 |
py) BFS, DFS (0) | 2021.02.11 |
Union-Find(Disjoint-Set) 합집합 찾기 (0) | 2019.11.19 |
Comments