티스토리 뷰
퀵 정렬은 분할정복 기법으로 pivot값을 이용해 정렬하는 알고리즘입니다.
한 번 수행할 때 마다 크기가 반씩 줄어들며, pivot 값을 기준으로 왼쪽은 pivot 보다 작은 수, 오른쪽은 pivot보다 큰 수들이 모이게 됩니다.
퀵 정렬은 평균적으로 O(NlogN)의 시간복잡도로 수행되지만 최악의 경우 O(N^2)의 시간복잡도를 가집니다.
C++ 소스 코드
#include <cstdio>
using namespace std;
int nums[] = {3,6,1,2,9,7,4,4,10,8};
void quickSort(int s,int e){
if (s>=e) return;
int p = s;
int i = s+1;
int j = e;
while(i <= j) {
while(i<=e && nums[i]<= nums[p]) i++;
while(j>s && nums[j]>= nums[p]) j--;
if (i>j){
// 인덱스가 엇갈렸으면 작은 수, pivot swap
int temp = nums[j];
nums[j] = nums[p];
nums[p] = temp;
} else {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
quickSort(s,j-1);
quickSort(j+1,e);
}
int main(){
quickSort(0,9);
for(int i=0;i<10;i++){
printf("%d ", nums[i]);
}
return 0;
}
Swift 소스 코드
import Foundation
var nums = [3,6,1,2,9,7,4,5,10,8]
func quickSort(s: Int, e: Int) {
if s >= e { return }
var p = s
var i = s + 1
var j = e
while i <= j {
while i <= e && nums[i] <= nums[p] {
i+=1
}
while j > s && nums[j] >= nums[p] {
j-=1
}
if i > j {
let temp = nums[j]
nums[j] = nums[p]
nums[p] = temp
} else {
let temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
}
}
quickSort(s: s, e: j-1)
quickSort(s: j+1, e: e)
}
quickSort(s: 0, e: 9)
for num in nums {
print(num)
}'Algorithm > 알고리즘 개념' 카테고리의 다른 글
| C++) 버블정렬 (Bubble Sort) (0) | 2020.11.23 |
|---|---|
| C++) 병합정렬 (Merge Sort) (0) | 2020.08.26 |
| C++ / Swift ) 삽입정렬 (Insertion Sort) (0) | 2020.06.18 |
| C++ / Swift ) 선택정렬 (Selection Sort) (0) | 2020.06.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- rxswift6
- 코코아팟
- SwiftUI
- ARKit
- cocoapods
- Reactivex
- blendshape
- rxswift
- blendshapes
- C++
- disposeBag
- Lottie
- 백준온라인저지
- 프로그래머스
- Swift unowned
- boj
- ios
- SWEA
- coreml
- 알고리즘
- Swift weak
- GraphDB
- 백준
- 안드로이드
- Kotlin
- DispatchQueue
- Swift
- 카카오인턴십
- infallible
- UIHostingController
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함