Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Quicksort partitioning
1. Quicksort partitioning
11 18 1 20 5 12 5 16 21 9 13 17 3 24 15 19
pivot i j
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
2. Quicksort partitioning
11 18 1 20 5 12 5 16 21 9 13 17 3 24 15 19
pivot i j
i 포인터는 pivot 보다 큰 요소가 나왔기 때문에 여기서 멈춤
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
3. Quicksort partitioning
11 18 1 20 5 12 5 16 21 9 13 17 3 24 15 19
pivot i j
j 포인터는 pivot 보다 작은 요소가 나올 때 까지 감소시킴
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
4. Quicksort partitioning
11 18 1 20 5 12 5 16 21 9 13 17 3 24 15 19
pivot i j
j 포인터는 pivot 보다 작은 요소가 나올 때 까지 감소시킴
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
5. Quicksort partitioning
11 18 1 20 5 12 5 16 21 9 13 17 3 24 15 19
pivot i j
j 포인터는 pivot 보다 작은 요소가 나올 때 까지 감소시킴
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
6. Quicksort partitioning
11 18 1 20 5 12 5 16 21 9 13 17 3 24 15 19
pivot i j
j 포인터가 pivot 보다 작다.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
7. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
j 포인터가 pivot 보다 작다. 멈추고 a[i] 와 a[j] 를 swap.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
8. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
i 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
9. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
i 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
10. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
i 가 pivot 보다 크다. 멈춤.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
11. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
j 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
12. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
j 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
13. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
j 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
14. Quicksort partitioning
11 3 1 20 5 12 5 16 21 9 13 17 18 24 15 19
pivot i j
j 가 pivot 보다 작다.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
15. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
j 가 pivot 보다 작다. 멈추고 i 와 j swap.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
16. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
i 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
17. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
i 가 pivot 보다 크다. 멈춤.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
18. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
j 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
19. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
j 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
20. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
j 스캔
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
21. Quicksort partitioning
11 3 1 9 5 12 5 16 21 20 13 17 18 24 15 19
pivot i j
j 가 pivot 보다 작다.
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
https://yaboong.github.io
22. Quicksort partitioning
11 3 1 9 5 5 12 16 21 20 13 17 18 24 15 19
pivot i j
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
j 가 pivot 보다 작다. 멈추고 i 와 j swap.
https://yaboong.github.io
23. Quicksort partitioning
11 3 1 9 5 5 12 16 21 20 13 17 18 24 15 19
pivot ij
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
i 스캔
https://yaboong.github.io
24. Quicksort partitioning
11 3 1 9 5 5 12 16 21 20 13 17 18 24 15 19
pivot ij
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
i 가 pivot 보다 크다. 멈춤.
https://yaboong.github.io
25. Quicksort partitioning
11 3 1 9 5 5 12 16 21 20 13 17 18 24 15 19
pivot ij
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
j 스캔.
https://yaboong.github.io
26. Quicksort partitioning
11 3 1 9 5 5 12 16 21 20 13 17 18 24 15 19
pivot j
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
j 가 pivot 보다 작다. 멈춤.
i
https://yaboong.github.io
27. Quicksort partitioning
11 3 1 9 5 5 12 16 21 20 13 17 18 24 15 19
pivot j
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
i 와 j 포인터가 교차되었으므로 partitioning 종료.
j 는 pivot 보다 작은 요소들의 맨 마지막 위치를 가리킴.
i 는 pivot 보다 큰 요소들의 맨 처음 위치를 가리킴.
i
https://yaboong.github.io
28. Quicksort partitioning
5 3 1 9 5 11 12 16 21 20 13 17 18 24 15 19
pivot j
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
i 와 j 포인터가 교차되었으므로 partitioning 종료.
이때, i 와 j 포인터가 교차되면
pivot 보다 작은 요소들의 맨 마지막 위치를 가리키는 j 와 pivot 의 위치 변경.
그리고 j 의 위치를 return.
i
https://yaboong.github.io
29. Quicksort partitioning
5 3 1 9 5 11 12 16 21 20 13 17 18 24 15 19
pivot j
i 와 j 포인터가 교차할 때 까지 반복
- i 는 a[i] < a[pivot] 인 동안 왼쪽에서 오른쪽으로 증가 -> pivot 보다 큰 요소가 나올 때 까지
- j 는 a[j] > a[pivot] 인 동안 오른쪽에서 왼쪽으로 감소 -> pivot 보다 작은 요소가 나올 때 까지
- a[i], a[j] 위치 변경
a
왼쪽은 모두 pivot 보다 작게, 오른쪽은 모두 pivot 보다 크도록
pivot 을 기준으로 partition 되었다.
i
https://yaboong.github.io