728x90
퀵 정렬(Quick Sort)
- 정렬 알고리즘의 꽃
- 기준점(pivot 이라고 부름)을 정해서, 기준점보다 작은 데이터는 왼쪽(left), 큰 데이터는 오른쪽(right) 으로 모으는 함수를 작성함
- 각 왼쪽(left), 오른쪽(right)은 재귀용법을 사용해서 다시 동일 함수를 호출하여 위 작업을 반복함
- 함수는 왼쪽(left) + 기준점(pivot) + 오른쪽(right) 을 리턴함
기준점 pivot은 배열에서 첫번째 데이터로
pivot보다 작으면 왼쪽배열, 크면 오른쪽배열로 저장
왼쪽배열 + 기준점 + 오른쪽배열 모두 합쳐서 리턴해준다.
Swift 코드로 작성해봤다.
테스트도 성공!
func quickSort(array: [Int]) -> [Int] {
if array.count <= 1 {
return array
}
let pivot: Int = array[0]
var left: [Int] = []
var right: [Int] = []
for index in 1..<array.count {
if pivot > array[index] {
left.append(array[index])
} else {
right.append(array[index])
}
}
return quickSort(array: left) + [pivot] + quickSort(array: right)
}
방법 이해하고 그대로 코드로 옮겨주면 된다.
글로 설명되어있을 때에는 어려웠는데 엑셀로 차근차근 단계별로 설명해주시는 것 보고 금방 구현했다!
퀵 정렬 시간복잡도
병합정렬과 유사, 시간복잡도는 O(n log n)
- 단, 최악의 경우
- 맨 처음 pivot이 가장 크거나, 가장 작으면
- 모든 데이터를 비교하는 상황이 나옴
- O(n²)
오늘은 퀵정렬.
방법만 이해하면 쉽게 구현해볼 수 있었다.
강의자료에 리스트의 특정 데이터 기준으로 데이터 나누기 등등 퀵정렬 알고리즘 구현을 위한 기초적인 문제들이 단계별로 포함되어 있어서 먼저 생각하면서 그 문제들을 풀어내니, 퀵정렬 알고리즘을 좀더 빠르게, 쉽게 구현할 수 있었다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘] 패스트캠퍼스 챌린지 23일차 (0) | 2021.09.28 |
---|---|
[알고리즘] 패스트캠퍼스 챌린지 22일차 (0) | 2021.09.27 |
[알고리즘] 패스트캠퍼스 챌린지 20일차 (0) | 2021.09.25 |
[알고리즘] 패스트캠퍼스 챌린지 19일차 (0) | 2021.09.24 |
[알고리즘] 패스트캠퍼스 챌린지 18일차 (0) | 2021.09.23 |