일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 상속
- 남양주맛집
- c언어문자열
- 추상클래스
- JavaScript
- Python
- BeautifulSoup
- 장고
- 컴퓨터과학
- 아스키코드
- Django
- 강원도속초맛집
- 노마드코더
- FLUTTER
- removetooltip
- 알고리즘
- richtext
- 정렬알고리즘
- 자바
- pipenv
- 속초여행
- DOM
- 코딩독학
- python3
- popupmenubutton
- 성수동카페
- 포인터
- 가상환경
- 건대입구맛집
- 부스트코스
- Today
- Total
YUYANE
알고리즘 / 삽입 정렬 본문
학습 도서
이것이 코딩테스트다 with 파이썬 (한빛미디어, 나동빈 저)
정렬(Sorting)
- 데이터를 특정한 기준에 따라서 순서대로 나열하는 것
- 예시 : 오름차순, 내림차순
- 종류 : 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬
삽입 정렬(Insertion Sort)
- 컨셉 : 순서대로 데이터를 확인하며 적절한 위치에 삽입한다.
- 알고리즘
1) 첫 번째 데이터는 그대로 둔다.
2) 두 번째 데이터가 첫 번째 데이터보다 큰 지 판단한다.
3) 크다면 그대로 두고, 작다면 첫 번째 데이터의 앞으로 옮긴다.
4) 세 번째 데이터가 두 번째 데이터보다 큰 지 판단한다.
5) 크다면 그대로 두고, 작다면 두 번째 데이터 앞으로 옮긴다.
6) 만약에 세 번째 데이터를 두 번째 데이터 앞으로 옮겼다면 첫 번째 데이터보다 큰 지 판단한다.
7) 크다면 그대로 두고, 작다면 첫 번째 데이터 앞으로 옮긴다.
8) 네 번째 데이터가 세 번째 데이터보다 큰 지 판단한다.
...
전체 소스 코드
array = [7,5,9,0,3,1,6,2,4,8]
for i in range(1, len(array)):
for j in range(i,0,-1):
if array[j] < array[j-1]:
array[j], array[j-1] = array[j-1], array[j]
else :
break
print(array)
해설
코드를 차근차근 살펴보자.
array = [7,5,9,0,3,1,6,2,4,8]
- Goal : 위의 데이터들을 오름차순으로 나열하자.
for i in range(1, len(array)):
- len(array) = 10
- range(1, len(array)) = [1,2,3,..,9]
(포스팅 참고 : 1y9u9j2in.tistory.com/152?category=910442 )
- i = 1, 2, 3, ..., 9
for j in range(i,0,-1):
- range(i, 0, -1) : i부터 0까지 1씩 감소하며 나열되는 배열
- i = 1, range(i, 0, -1) = [1, 0]
- j =1, 0
- i = 2, range(i, 0, -1) = [2, 1, 0]
- j = 2, 1, 0
...
- i = 9, range(i, 0, -1) = [9, 8, 7, ..., 2, 1, 0]
- j = 9, 8, ..., 0
if array[j] < array[j-1]:
array[j], array[j-1] = array[j-1], array[j]
else :
break
- i =1, j = 1,
array[1] < array[0] 이므로 array[1], array[0] 은 서로 자리를 바꾼다.
array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
- i =2, j = 2,
array[2] > array [1] 이므로 break
- i = 2, j = 1,
array[1] > array[0] 이므로 break
- i = 3, j = 3,
array[3] < array[4] 이므로 서로 자리를 바꾼다.
array = [5, 7, 0, 9, 3, 1, 6, 2, 4, 8]
- i = 3, j= 2,
array[2] < array[1] 이므로 서로 자리를 바꾼다.
array = [5, 0, 7, 9, 3, 1, 6, 2, 4, 8]
- i = 3, j= 1,
array[1] < array[0] 이므로 서로 자리를 바꾼다.
array = [0, 5, 7, 9, 3, 1, 6, 2, 4, 8]
...
print(array)
- 오름차순 완성
'Programming Theory > Algorithm' 카테고리의 다른 글
알고리즘 / 선형 검색 (0) | 2021.02.02 |
---|---|
알고리즘 / 계수 정렬 (0) | 2021.01.25 |
알고리즘 / 선택 정렬 (0) | 2021.01.22 |
Python/ HackerRank Find the Runner-Up Score! (0) | 2021.01.11 |
Python/ HackerRank Detect Floating (0) | 2021.01.06 |