|
1 |
| -# 모든 원소의 값이 0보다 크거나 같다고 가정 |
2 |
| -array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2] |
3 |
| -# 모든 범위를 포함하는 리스트 선언 (모든 값은 0으로 초기화) |
4 |
| -count = [0] * (max(array) + 1) |
| 1 | +array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8] |
5 | 2 |
|
6 |
| -for i in range(len(array)): |
7 |
| - count[array[i]] += 1 # 각 데이터에 해당하는 인덱스의 값 증가 |
| 3 | +def quick_sort(array, start, end): |
| 4 | + if start >= end: # 원소가 1개인 경우 종료 |
| 5 | + return |
| 6 | + pivot = start # 피벗은 첫 번째 원소 |
| 7 | + left = start + 1 |
| 8 | + right = end |
| 9 | + while(left <= right): |
| 10 | + # 피벗보다 큰 데이터를 찾을 때까지 반복 |
| 11 | + while(left <= end and array[left] <= array[pivot]): |
| 12 | + left += 1 |
| 13 | + # 피벗보다 작은 데이터를 찾을 때까지 반복 |
| 14 | + while(right > start and array[right] >= array[pivot]): |
| 15 | + right -= 1 |
| 16 | + if(left > right): # 엇갈렸다면 작은 데이터와 피벗을 교체 |
| 17 | + array[right], array[pivot] = array[pivot], array[right] |
| 18 | + else: # 엇갈리지 않았다면 작은 데이터와 큰 데이터를 교체 |
| 19 | + array[left], array[right] = array[right], array[left] |
| 20 | + # 분할 이후 왼쪽 부분과 오른쪽 부분에서 각각 정렬 수행 |
| 21 | + quick_sort(array, start, right - 1) |
| 22 | + quick_sort(array, right + 1, end) |
8 | 23 |
|
9 |
| -for i in range(len(count)): # 리스트에 기록된 정렬 정보 확인 |
10 |
| - for j in range(count[i]): |
11 |
| - print(i, end=' ') # 띄어쓰기를 구분으로 등장한 횟수만큼 인덱스 출력 |
| 24 | +quick_sort(array, 0, len(array) - 1) |
| 25 | +print(array) |
0 commit comments