반응형
250x250
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
- 디렉토리계층구조
- 코어뱅킹
- 모놀리식
- jdk17
- 학점은행제
- 은행IT
- 채널계
- it자격증
- 맥북환경설정
- oracleapex
- 맥북
- 개인프로필스튜디오창업
- fastapi
- 오라클
- MSA
- DB
- union
- 컴퓨터공학학사취득
- 학점은행제무료강의
- python
- 프로그래머스
- SQL
- Homebrew
- 코딩테스트
- Pass By Value
- jdk
- 계정계
- 의사결정나무모형
- 렌탈스튜디오창업
- 맥북셋팅
Archives
- Today
- Total
개발머해니
[파이썬] 퀵정렬 (1) partition 함수 - 분할정복 ★ 본문
728x90
반응형
실습 설명
partition 함수를 작성하세요.
partition 함수는 리스트 my_list, 그리고 partition할 범위를 나타내는 인덱스 start와 인덱스 end를 파라미터로 받습니다. my_list의 값들을 pivot 기준으로 재배치한 후, pivot의 최종 위치 인덱스를 리턴해야 합니다.
예시 1
Pivot(기준점)은 마지막 인덱스에 있는 5.
list1 = [4, 3, 6, 2, 7, 1, 5]
pivot_index1 = partition(list1, 0, len(list1) - 1)
print(list1)
print(pivot_index1)
[4, 3, 2, 1, 5, 6, 7]
4
5보다 작은 값들은 왼쪽에, 5보다 큰 값들은 오른쪽에 배치됩니다.
예시 2
Pivot(기준점)은 마지막 인덱스에 있는 4.
list2 = [6, 1, 2, 6, 3, 5, 4]
pivot_index2 = partition(list2, 0, len(list2) - 1)
print(list2)
print(pivot_index2)
[1, 2, 3, 4, 6, 5, 6]
3
4보다 작은 값들은 왼쪽에, 4보다 큰 값들은 오른쪽에 배치됩니다.
팁
partition 함수를 작성하다 보면 코드가 꽤나 지저분해질 수 있습니다. 특히 리스트에서 값들의 위치를 바꿔주는 경우가 많은데요. 코드가 지저분해지는 걸 방지하기 위해서 swap_elements라는 함수를 먼저 작성하는게 좋습니다.
list1 = [1, 2, 3, 4, 5, 6]
swap_elements(list1, 2, 5) # 2번 인덱스 값과 5번 인덱스 값 위치 바꿈
print(list1) # => [1, 2, 6, 4, 5, 3]
실습 결과
# 두 요소의 위치를 바꿔주는 helper function
def swap_elements(my_list, index1, index2):
temp = my_list[index1]
my_list[index1] = my_list[index2]
my_list[index2] = temp
# 퀵 정렬에서 사용되는 partition 함수
def partition(my_list, start, end):
# 리스트 값 확인과 기준점 이하 값들의 위치 확인을 위한 변수 정의
i = start
b = start
p = end
# 범위안의 모든 값들을 볼 때까지 반복문을 돌린다
while i < p:
# i 인덱스의 값이 기준점보다 작으면 i와 b 인덱스에 있는 값들을 교환하고 b를 1 증가 시킨다
if my_list[i] <= my_list[p]:
swap_elements(my_list, i, b)
b += 1
i += 1
# b와 기준점인 p 인덱스에 있는 값들을 바꿔준다
swap_elements(my_list, b, p)
p = b
# pivot의 최종 인덱스를 리턴해 준다
return p
# 테스트 코드 1
list1 = [4, 3, 6, 2, 7, 1, 5]
pivot_index1 = partition(list1, 0, len(list1) - 1)
print(list1)
print(pivot_index1)
# 테스트 코드 2
list2 = [6, 1, 2, 6, 3, 5, 4]
pivot_index2 = partition(list2, 0, len(list2) - 1)
print(list2)
print(pivot_index2)
[4, 3, 2, 1, 5, 6, 7]
4
[1, 2, 3, 4, 6, 5, 6]
3
728x90
반응형
'알고리즘' 카테고리의 다른 글
[파이썬] 퀵정렬 (3) 퀵 정렬 더 멋있게 구현하기 - 분할정복 ★ (0) | 2023.09.18 |
---|---|
[파이썬] 퀵정렬 (2) quicksort 함수 - 분할정복 ★ (0) | 2023.09.17 |
[파이썬] 합병정렬 (2) merge_sort 함수 - 분할정복 ★ (0) | 2023.09.16 |
[파이썬] 합병정렬 (1) merge 함수 - 분할정복 ★ (0) | 2023.09.16 |
[파이썬] 1부터 n까지의 합 - 분할 정복 ★ (0) | 2023.09.16 |