한 평생 Bubble sort
만 사용하다가 이대로 계속 무식하면 안되겠다 싶어서 찾아보았다.
Quick sort
는 Charles Antony Richard Hoare 경에 의해 개발되었다.
알고리즘
- List 중 하나의 Element를 선택한다. 이를
Pivot
이라 부른다. Pivot
을 기준으로 좌측에는 작은 Element들이 오도록, 우측에는 큰 Element들이 오도록 나눈다. 이 과정을분할 (Divide)
이라 한다.- 분할한 두 개의 좌, 우측 List에 대해 재귀적으로 이 과정을 반복한다. List의 크기가 0 또는 1이 될 때까지 반복한다.
Psuedocode
|
|
위의 Psuedocode는 pivot
지점을 list의 좌측 즉, 시작점인 left
로 설정한다.
right
는 우측 끝 값이며, j는 아래의 while문 처리를 위해 right + 1
로 설정한다.
좌측 값이 pivot
보다 작으면 무시하고 우측 값이 pivot
보다 크면 무시하게끔 while문이 돌아간다.
좌측에서 발견한 pivot보다 큰 값
과 우측에서 발견한 pivot보다 작은 값
을 교환한다.
이를 i
와 j
의 위치가 역전될 때까지 반복한다.
이 때 j
는 pivot
보다 작은 값이 위치하게 되기 때문에 pivot
과 자리를 바꾼다.
Implementation
Java로 구현하면 아래와 같이 된다. Psuedocode대로 구현하면 제대로 동작하지 않아 조금 수정하였다.
다시 구현하라고 하면 못할 것 같다…
|
|