24090번: 알고리즘 수업 - 퀵 정렬 1
2 5 1 4 3(i=0, j=1, A[1]과 A[1]이 교환됨) -> 2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i=1, j=3, A[2]와 A[3]이 교환됨) -> 2 1 5 4 3(i=2, j=4) -> 2 1 5 4 3(i=2, j=5, A[3]과 A[5]가 교환됨) -> 2 1 3 4 5(i=0, j=1) -> 2 1 3 4 5(i=0, j=2, A[1]과 A[2]가
www.acmicpc.net
간단한 퀵정렬 문제.
재귀를 사용하기 때문에 pypy3으로 제출하였다.
※ sys.setrecursionlimit()
파이썬의 기본 재귀 깊이 제한은 1000으로 매우 얕은 편이다.
따라서 위 코드 괄호 안에 내가 원하는 깊이를 미리 설정해두어야 재귀 오류가 발생하지 않는다.
코드
import sys
sys.setrecursionlimit(int(1e4))
input = sys.stdin.readline
def partition(array,start,end):
global cnt
pivot = array[end]
i = start-1
for j in range(start,end):
if array[j] <= pivot:
i +=1
array[i], array[j] = array[j], array[i]
cnt += 1
if cnt == k:
print(array[i],array[j])
if i+1 != end:
array[i+1], array[end] = array[end], array[i+1]
cnt += 1
if cnt == k:
print(array[i+1],array[end])
return i+1
def quickSort(array,start,end):
if start >= end:
return
q = partition(array,start,end)
quickSort(array,start,q-1)
quickSort(array,q+1,end)
n,k = map(int,input().split())
array = list(map(int,input().split()))
cnt = 0
quickSort(array,0,n-1)
if cnt < k:
print(-1)
[알고리즘] 퀵 정렬(quick sort)
퀵 정렬 - 기준을 설정한 다음 큰 수와 작은 수를 교환한 후 리스트를 반으로 나누는 동작 - 호어 분할 방식 -> 리스트에서 첫번째 데이터를 pivot(기준)으로 정한다. -> 왼쪽에서부터 피벗보다 큰
jeongeunji1127.tistory.com
'Algorithm > Backjoon' 카테고리의 다른 글
[백준] 1095번 파이썬 - 마법의 구슬 (0) | 2024.05.10 |
---|---|
[백준] 24092번 파이썬 - 퀵 정렬 3 (0) | 2024.04.04 |
[백준] 17406번 파이썬 - 배열 돌리기 4 (1) | 2024.04.03 |
[백준] 16927번 파이썬 - 배열 돌리기 2 (0) | 2024.04.02 |
[백준] 16926번 파이썬 - 배열 돌리기 1 (0) | 2024.03.29 |