요약
내용
원리
- 피벗(pivot)을 중심으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할하여 정렬하는 분할 정복 알고리즘이다.
- 작은 값은 왼쪽, 큰 값은 오른쪽에 위치하도록 배열을 재정렬한다.
- 재귀로 호출하고 부분 배열의 크기가 1이 되면, 전체 배열이 정렬된 상태가 된다.
시간 복잡도
- 평균
- 최악, 정렬된 배열에서 첫 번째 요소를 피벗으로 선택한 경우
장점
- 추가 메모리 사용이 적고, 평균적으로 빠르다.
단점
구현체
package main
import "fmt"
func quickSort(arr []int, low, high int) {
if low < high {
pi := partition(arr, low, high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
}
}
func partition(arr []int, low, high int) int {
pivot := arr[high]
i := low - 1
for j := low; j < high; j++ {
if arr[j] <= pivot {
i++
arr[i], arr[j] = arr[j], arr[i]
}
}
arr[i+1], arr[high] = arr[high], arr[i+1]
return i + 1
}
func main() {
arr := []int{3, 2, 5, 4, 1}
fmt.Println("Before quickSort array: ", arr)
quickSort(arr, 0, len(arr)-1)
fmt.Println("After quickSort array: ", arr)
}
참고