퀵 정렬 코드
def quick_sort(seq, start, end): # 배열의 시작과 끝점을 입력
if start >= end: # 원소가 1개인 경우 return
return
pivot = start # 피벗은 첫번째 원소
left, right = start + 1, end
# left와 right가 엇갈린 경우 반복 종료
while left <= right:
while left <= end and seq[left] <= seq[pivot]: # 범위 내에서 left가 피벗보다 클 경우 찾기
left += 1
while right > start and seq[right] >= seq[pivot]: # 범위 내에서 right가 피벗보다 작을 경우 찾기
right -= 1
# 엇갈린 경우 > right와 피벗 위치 바꿔주기, 피벗의 위치가 정해진다. 반복 종료
if left > right:
seq[pivot], seq[right] = seq[right], seq[pivot]
# 엇갈리지 않았다면 left와 right 위치를 바꿔주기
else:
seq[left], seq[right] = seq[right], seq[left]
print(seq)
quick_sort(seq, start, right - 1) # right는 자리를 찾은 pivot -> pivot - 1, pivot + 1
quick_sort(seq, right + 1, end)
[Python] 검색 / 이진 검색(Binary search) (0) | 2021.12.14 |
---|---|
[Python] 정렬 / 병합 정렬(Merge Sort) (0) | 2021.12.07 |
[Python] 정렬 / 계수 정렬(Counting Sort) (0) | 2021.11.30 |
[Python] 정렬 / 삽입 정렬(Insertion sort) (0) | 2021.11.24 |
[Python] 정렬 / 버블 정렬(Bubble sort) / 선택 정렬(Selection sort) (0) | 2021.11.24 |