728x90
https://www.youtube.com/watch?v=7BDzle2n47c&t=303s
과정
1. 배열에서 적절한 피봇을 선출한다
- 배열에서 값이 중간값일 수록 좋지만 중간값을 찾기위해서는 탐색을 해야하므로 물리적으로 중간에 위치한 값을 피봇으로 선택
2. 배열의 시작위치의 인덱스를 L로 지정하고 배열의 끝 위치의 인덱스를 R로 지정한다
3. L은 피봇값보다 작은값(L < Pivot)은 무시하며 인덱스를 1씩 증가시킨다
(계속해서 증가하다가 Pivot의 위치에 다달으면 Pivot값보다 작은값이 아니므로 피봇의 위치에서 멈추게 된다)
4. R은 피봇값보다 큰값(R > Pivot)은 무시하며 인덱스를 1씩 감소시킨다
(계속해서 감소하다가 Pivot의 위치에 다달으면 Pivot값보다 큰값이 아니므로 피봇의 위치에서 멈추게 된다)
5. Swap
1) L과 R이 모두 무시하지 못한채로 멈춘경우 L과 R을 서로 Swap한 다음 L과 R의 인덱스를 1씩 증감 시킨다
2) 둘중 한쪽이 Pivot에 멈춰있고 둘중 한쪽이 값을 찾아 멈춰있는 경우 Pivot과 값을 바꾼다
3) 모두 정렬되어 있을 경우 Pivot의 위치에서 L과 R이 만난다
6. L의 인덱스가 R의 인덱스보다 작을때 까지만 위의 과정을 반복한다.
'CS(Computer Science) > 알고리즘' 카테고리의 다른 글
알고리즘 - Dynamic Programming(동적프로그래밍)이란? (18) | 2019.04.06 |
---|---|
알고리즘 - 그리디01 그리디(Greedy) 알고리즘이란? (0) | 2019.03.18 |
JAVA 버블정렬이란(Bubble Sort) (0) | 2018.10.28 |
JAVA 선택정렬이란(Selection Sort) (0) | 2018.10.28 |
알고리즘 성능분석 (0) | 2018.10.21 |