incastle의 콩나물
[알고리즘] 2750번 - 수 정렬하기 1번, 퀵 정렬(divide and conquer), python (2) 본문
python/알고리즘
[알고리즘] 2750번 - 수 정렬하기 1번, 퀵 정렬(divide and conquer), python (2)
incastle 2019. 3. 30. 11:30[백준 알고리즘] 2750번
정말 많은 정렬 알고리즘이 존재하고, 이번에 공부한 것은 퀵 정렬
1. list를 input으로 하면 맨 끝의 값을 pivot으로 선언
2. pivot을 기준으로 작으면 왼쪽, 크면 오른쪽으로 쌓기 (단 왼쪽 블럭과 오른쪽 블록이 정렬된 것은 아님)
3. 왼쪽 블록의 가장 오른쪽 값을 새로운 pivot으로 선언
4. 반복하기
2번 항목 상세
2번을 위해서 요소의 위치를 바꿔주는 함수, 반복하는 함수 partition함수 선언
# 두 요소의 위치를 바꿔주는 함수
def swap_elements(my_list, index1, index2):
# 코드를 작성하세요.
index_value1 = my_list[index1]
index_value2 = my_list[index2]
my_list[index1] = index_value2
my_list[index2] = index_value1
return my_list
# partition 함수
def partition(my_list, start, end):
store_index = start
for i in range(start, end):
if my_list[i] < my_list[end]:
swap_elements(my_list,i,store_index)
store_index += 1
swap_elements(my_list,store_index, end)
return store_index
3번을 위한 최종 quicksort함수 선언
# 퀵 정렬
def quicksort(my_list, start=None, end=None ):
if start == None and end == None:
start = 0
end = len(my_list) - 1
if end - start < 1:
return
new_pivot=partition(my_list, start, end)
quicksort(my_list, start, new_pivot-1)
quicksort(my_list, new_pivot+1, end)
'python > 알고리즘' 카테고리의 다른 글
[알고리즘] 정수 배열(int array)가 주어질 때 가장 큰 이어지는 원소들의 합을 구하기, Brute force, python(4) (0) | 2019.04.05 |
---|---|
[알고리즘] 백준 알고리즘 1001번, A-B 출력, python(3) (0) | 2019.04.05 |
[알고리즘] 독학으로 공부하는 법 (0) | 2019.03.31 |
[알고리즘] 최소 동전으로 거슬러 주기, greedy 알고리즘, python (3) (1) | 2019.03.31 |
[알고리즘] 빗물의 총량 계산, brute force, python (1) (1) | 2019.03.28 |
Comments