일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재테크/투자
- SW Expert Academy
- 데이터베이스
- D2
- 운영체제
- Database
- OS
- cs
- 백준
- data structure
- c++
- db
- 문제풀이
- 감상문
- D3
- algorithm
- Computer Science
- 독서
- 알고리즘
- 자료구조
- language
- 법의학
- 프로그래머스
- algogritim
- network
- 네트워크
- BOJ
- Programmers
- LeetCode
- swea
Archives
- Today
- Total
선택은 나의 것
[Algorithm] 퀵 정렬(Quick sort) C++ 코드 본문
퀵 정렬(Quick Sort)
비교 방식 알고리즘(Comparisons Sorting Algorithm)
퀵 정렬은 특정한 값인 피벗(Pivot)을 기준으로 큰 숫자와 작은 숫자를 구분하여 정렬한다. 퀵 정렬은 Sorting 알고리즘 중에 가장 빠르다고 하여 Quick이라는 이름이 붙여졌지만, Worst Case에서는 그렇지 않다. 퀵 정렬은 분할 정복 알고리즘을 이용하며 시간 복잡도는 평균 O(N * logN) 이지만 Worst Case에서는 O(n^2)의 시간복잡도를 갖는다.
#include <iostream>
#include <vector>
using namespace std;
vector<int> arr = {2, 8, 1, 3, 6, 4, 7, 5, 9};
void quickSort(int start, int end) {
if (start >= end)
return;
int i = start + 1, j = end;
while (i <= j) {
while (i <= end && arr[i] <= arr[start]) {
i++;
}
while (j > start && arr[j] >= arr[start]) {
j--;
}
if (i > j) {
int temp = arr[j];
arr[j] = arr[start];
arr[start] = temp;
} else {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
quickSort(start, j - 1);
quickSort(j + 1, end);
}
int main() {
quickSort(0, arr.size() - 1);
//출력
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
return 0;
}
정렬과 관련해 다른 알고리즘을 배우고 싶다면 정렬 알고리즘(Sorting Algorithm) 포스트를 참고하길 바란다.
'☽ Computer Science > Algorithm' 카테고리의 다른 글
[Algorithm] 힙 정렬(Heap Sort) C++ 코드 (0) | 2020.08.07 |
---|---|
[Algorithm] 병합 정렬(Merge Sort) C++ 코드 (0) | 2020.08.07 |
[Algorithm] 삽입 정렬(Insertion Sort) C++ 코드 (0) | 2020.08.05 |
[Algorithm] 선택 정렬(Selection Sort) C++ 코드 (0) | 2020.08.05 |
[Algorithm] 버블 정렬(Bubble Sort) C++ 코드 (0) | 2020.08.05 |
Comments