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 |
Tags
- 테이블항목
- 할일관리
- jpa 연관관계
- restful login 메소드
- Intellij terminal jar
- initializr
- create 모드
- 알고리즘
- Gradle - Kotlin
- ERD 수정
- 연관관계
- springboot
- 어노테이션
- restful api 작성 방법
- Gradle - Groovy
- SpringBoot개인프로젝트
- logout http 메소드
- auto ddl
- springboot mysql
- 데이터베이스
- sendError()
- 쿼리에러
- restful 카멜케이스
- 터미널 실행
- jpa
- 아규먼트 리졸버
- intellij 속도 향상
- restful api 명세서
- 파이썬
- 테이블구성
Archives
- Today
- Total
리나 Dev토리
TIL 항해W4 알고리즘 - 버블정렬, 선택정렬, 삽입정렬 본문
🏁 버블소트, 선택정렬, 삽입정렬 구현하기
버블소트, 선택정렬, 삽입정렬을 구현해보았다.
버블소트의 개념을 숙지한 다음에, 코드를 구현해보았다.
혼자 어느정도 해보고 막힐때 답안코드를 참고하였다.
답안과는 다른 방식으로 구현하였지만, 그 과정은 동일하다.
# 버블소트 구현해보기(혼자+답안참고)
lst = [4, 6, 2, 9, 1]
def bubble(lst):
for j in range(1, len(lst)): # 1,2,3,4
# print('j:',j)
# 점점 for문 범위를 줄이기 위해서 j만큼 빼줌
for i in range(len(lst)-j): # 5-1, 5-2, 5-3, 5-4
if lst[i] > lst[i+1]:
lst[i], lst[i+1] = lst[i+1], lst[i]
# print(lst)
# for문을 한바퀴 돌면 최대값이 맨 뒤에 있음
return lst
# print(lst) # 구현코드를 메소드로 안감싸면, 정렬된 리스트 출력됨
print(bubble(lst))
print(bubble([3, 2, 1, 5, 3, 2, 3]))
assert bubble([3, 2, 1, 5, 3, 2, 3]) == [1, 2, 2, 3, 3, 3, 5]
선택정렬은 처음 구현해본 코드가 정렬 결과는 맞는데, 과정을 출력해보니, 정렬 과정이 다르다는 것을 발견하였다.
그래서 그 부분을 수정하여 다시 구현해보았다.
# 선택정렬 구현해보기
def select(lst):
for i in range(len(lst)-1):
for j in range(1, len(lst)-i):
if lst[i] > lst[i+j]:
lst[i], lst[i+j] = lst[i+j], lst[i]
print('_',lst)
return lst
# 되긴 됬는데, 선택정렬이 아닌가?
# 최소값을 찾으면서, 중간에 찾은 lst[i]보다 작은애를 발견할때마다 swap을 해주는군
# 선택정렬 완성본
def select2(lst):
for i in range(len(lst)-1):
minTemp = i # 최소값을 찾기 위해 한번 도는 중에 최소값 index 임시저장
for j in range(1, len(lst)-i):
# if lst[i] > lst[i+j]:
# if lst[minTemp] > lst[i+j]:
# print(f'i: {i}, i+j: {i+j}, temp: {minTemp}')
# minTemp = i+j
if lst[i] > lst[i+j] and lst[minTemp] > lst[i+j]: # 상동
# print(f'i: {i}, i+j: {i+j}, temp: {minTemp}')
minTemp = i+j
# print('minIdx:',minTemp)
lst[i], lst[minTemp] = lst[minTemp], lst[i]
# print('_',lst)
return lst
# print(select([4, 6, 2, 9, 1]))
print(select2([4, 6, 2, 9, 1]))
그 다음 삽입정렬을 구현해보았다.
index 0번째는 놔두고, 1번째 요소부터 왼쪽의 요소와 비교하여, 왼쪽보다 자기가 작으면 자리를 스왑한다.
왼쪽을 한칸씩 이동하며 계속 비교한다.
# 삽입정렬 구현해보기
def insert(lst):
for i in range(1, len(lst)): # 1,2,3,4 현재 들어온 신병 index
for j in range(i-1, -1, -1): # 0 / 1,0 / 2,1,0
# print(f'i:{i}, j:{j}')
if lst[j] > lst[i]: # 내 왼쪽에 있는 요소가 더 크면, 자리 스왑
lst[i], lst[j] = lst[j], lst[i]
i -= 1 # 나의 index도 왼쪽으로 한칸 이동했으니 -1 해주기
return lst
print(insert([4, 6, 2, 9, 1]))
for i in range(5,-1,-1):
print(i)
assert insert([4, 6, 2, 9, 1]) == [1, 2, 4, 6, 9]
assert insert([3, 2, 1, 5, 3, 2, 3]) == [1, 2, 2, 3, 3, 3, 5]
강의 코드와 다르게 구현하였지만, 같은 방식으로 동작하는 코드를 작성하여 기뻤다.😁
예시 리스트를 종이에 적어보고, 값을 비교해야 하는 과정을 그려보고,
인덱스의 변화를 적어보고 이를 코드로 구현하였다.
'자료구조&알고리즘' 카테고리의 다른 글
WIL 항해W4 자료구조/알고리즘 3주차 (0) | 2022.04.04 |
---|---|
백준 10814번 : 나이순 정렬(파이썬) (2) | 2022.03.30 |
백준 10773번 : 제로 (파이썬) (0) | 2022.03.30 |
WIL 항해W3 자료구조/알고리즘 2주차 (0) | 2022.03.27 |
WIL 항해W2 자료구조/알고리즘 1주차 (0) | 2022.03.20 |
Comments