Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 항해99솔직후기 #항해99 #부트캠프추천
- 부트스트랩 #Bootstrap #웹개발첫걸음 #스파르타코딩클럽
- 스파르타코딩클럽 #코딩 #jQuery #Ajax
- #내일배움단 #코딩프로젝트 #국비지원 #내일배움카드 #스파르타코딩클럽
- 스파르타코딩클럽 #크롤링 #스크래핑
Archives
- Today
- Total
이모저모
퀵정렬(quick sort) - 전위순회방식의 DFS 본문
0. 병합정렬 vs 퀵정렬
퀵 정렬(quick sort)을 공부했다! 이건 병합정렬처럼 재귀적 구조를 가지기는 하지만, 확연히 다른 점이 있다.
바로 "전위순회방식"을 취한다는 점.
즉 자기 레벨에서 지정된 피봇으로 해야 할 작업을 모두 다 진행한 후에!
그래서 피봇이 자기 자리를 땅땅!! 확신한 후에!
이제 피봇위치 기준 좌우로 잘라서 자식들을 만들고,
그 자식들/아래 레벨들에 대해서도 다시 피봇을 설정해 같은 작업을 반복하도록 재귀적으로 호출해주는 것이다.
병합정렬의 경우에는 자식이 처리를 다했어야 자신이 할 일을 할 수 있었던 "후위순회방식"과 대조를 이룬다.
1. 손으로 하는 공부
시간을 꽤 들이기는 했어도, 나의 머리에 좀 더 우직히 퀵 정렬이 자리잡기를 바라는 마음으로 🤓📝
2. 코드
arr = [45, 21, 23, 36, 15, 67, 11, 60, 20, 33]
def Qsort(lt, rt):
if lt < rt:
pos = lt
pivot = arr[rt]
for i in range(lt, rt):
# 엇 나보다 작은 값 발견했다면 앞쪽으로 보내줘야지
# 저 앞에 pos 값하고 스왑해주자
# 이제 pos 자리는 나(pivot)보다 작은 애로 잘 채웠으니까,
# 다음에 작은애가 오면 그 다음칸에 채워줘야하니
# pos 는 한 칸 앞으로 이동하자!
if arr[i] <= pivot:
arr[i], arr[pos] = arr[pos], arr[i]
pos += 1
arr[rt], arr[pos] = arr[pos], arr[rt]
Qsort(lt, pos-1)
Qsort(pos+1, rt)
Qsort(0, 9)
print(arr)
'coding > 알고리즘,자료구조' 카테고리의 다른 글
top-down, 재귀, 메모이제이션 (0) | 2022.01.28 |
---|---|
동적 계획법 (dynamic programming) _bottom up (네트워크 선 자르기 문제) (0) | 2022.01.28 |
병합정렬 (merge-sort) _ 후위순회방식의 DFS (0) | 2022.01.28 |
DFS연습 - 동전 분배 (0) | 2022.01.28 |
leetcode - keys-and-rooms (0) | 2022.01.28 |
Comments