[Algorithm] 빠른정렬(Quick Sort) Swift

DevelopRecord·2022년 6월 21일
0

Algorithm

목록 보기
4/5

오늘은 빠른정렬에 대해 기록해 보려고 해요.

빠른정렬의 시간복잡도는 평균 O(nlog n)으로 O(n²)인 선택정렬보다
시간면에서 훨씬 유리해 많이 사용되는 방식입니다.

하지만 빠른정렬의 O(nlog n)은 '평균'이지 최악의 경우엔 O(n²)의 속도를 낼 수도 있습니다.
때에 따라서 적절하게 Merge Sort를 사용할 줄도 알아야 합니다.

코드 보면서 설명해 볼게요.

// 예를 들어 범위는 0~10까지 있다 가정
// 아래 뒤죽박죽의 배열을 0부터 10까지 순서대로 정렬
let arr = [8, 0, 2, 7, 10, 4, 6, 5, 3, 1, 9]

// 빠른정렬 함수 하나 만들고
func quickSort(_ arr: [Int]) -> [Int] {
	if arr.count < 2 {
    	return arr // 배열의 개수가 2개보다 작다면? 이미 정렬된 상태라 봐도 됩니다.
    } else {
   	// 기준이 될 값 하나 정합니다
    let pivot = arr[0] // == arr.randomElement()
    // 기준보다 작은 값
    let less = arr.filter { $0 < pivot }
    // 기준보다 큰 값
    let larger = arr.filter { $0 > pivot }
    
    return quickSort(less) + [pivot] + quickSort(larger)
    }
}

빠른정렬은 재귀함수에 대한 이해가 필요해요.
구글링 해보시고 브레이크 포인트 걸면서 디버깅 하면 이해가 되실 거에요.

이렇게 하고 프린트 찍어보시면

이렇게 정렬된 결과가 나옵니다.
머지소트는 좀 더 공부하고 게시해보도록 하겠습니다.

0개의 댓글