array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(array, start, end):
if start >= end: # 원소가 1개인 경우 종료
return
pivot = start # 피벗은 첫 번째 원소
left = start + 1
right = end
while(left <= right):
# 피벗보다 큰 데이터를 찾을 때까지 반복
while(left <= end and array[left] <= array[pivot]):
left += 1
# 피벗보다 작은 데이터를 찾을 때까지 반복
while(right > start and array[right] >= array[pivot]):
right -= 1
if(left > right): # 엇갈렸다면 작은 데이터와 피벗을 교체
array[right], array[pivot] = array[pivot], array[right]
else: # 엇갈리지 않았다면 작은 데이터와 큰 데이터를 교체
array[left], array[right] = array[right], array[left]
# 분할 이후 왼쪽 부분과 오른쪽 부분에서 각각 정렬 수행
quick_sort(array, start, right - 1)
quick_sort(array, right + 1, end)
quick_sort(array, 0, len(array) - 1)
print(array)
실행 결과
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
def quick_sort(arr):
# 리스트가 하나 이하의 원소만을 담고 있다면 종료
if len(arr) <= 1:
return arr
pivot = arr[0] # 피벗은 첫 번째 원소
tail = arr[1:] #피벗을 제외한 리스트
left_side = [x for x in tail if x <= pivot]
right_side = [x for x in tail if x > pivot]
# 분할 이후 왼쪽과 오른쪽 부분에서 각각 정렬 수행하고, 전체 리스트 반환
return quick_sort(left_side) + [pivot] + quick_sort(right_side)
print(quick_sort(array))
[Python] 정렬 알고리즘(6) - 정렬 알고리즘 비교하기 (0) | 2022.06.19 |
---|---|
[Python] 정렬 알고리즘(5)-계수 정렬(Counting sort) (0) | 2022.06.19 |
[Python] 정렬 알고리즘(3)-삽입 정렬 (0) | 2022.06.19 |
[Python] 정렬 알고리즘(2)-선택정렬 (0) | 2022.06.19 |
[Python] 정렬 알고리즘(1) (0) | 2022.06.19 |
댓글 영역