ยซ   2025/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
Archives
Recent Posts
04-13 04:25

Today
Total

Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

์—ฐ์˜ ๊ธฐ๋ก ๐Ÿช

[C++ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ€ต์ •๋ ฌ ๋ณธ๋ฌธ

Computer Science/์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

[C++ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ€ต์ •๋ ฌ

kite707 2024. 11. 26. 21:16

ํ€ต์ •๋ ฌ์€ ์ˆซ์ž ํ•˜๋‚˜(pivot)๋ฅผ ๊ณจ๋ผ์„œ ์˜ฌ๋ฐ”๋ฅธ ์ž๋ฆฌ์— ๋„ฃ์–ด๊ฐ€๋ฉฐ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋•Œ ๋ฐฐ์—ด์„ ์ชผ๊ฐœ๊ฐ€๋ฉฐ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข…์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(nlogn)์ด๋‹ค. 

๋™์ž‘ ๊ณผ์ •

์ด๋ก ์ ์ธ ๋‚ด์šฉ์— ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ ์–ด๋–ค์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋„๋ก ํ•˜์ž. ์•„๋ž˜์™€ ๊ฐ™์ด {5, 4, 1, 7, 6, 2} ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋งจ ์™ผ์ชฝ์„ ํ”ผ๋ด‡์œผ๋กœ ์žก๊ณ  left์™€ right๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ๊ฐ ์ง€์ •ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ์˜ left๋Š” pivot๋ณด๋‹ค ์ž‘์•„์•ผํ•˜๊ณ , right๋Š” pivot๋ณด๋‹ค ์ปค์•ผํ•œ๋‹ค. ์ด์ œ left๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ธฐ๋ฉฐ 5๋ณด๋‹ค ํฐ ์ˆ˜๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋‚˜์˜ค๋Š” ์ง€์ ์„ ์ฐพ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

right๋Š” pivot๋ณด๋‹ค ์ปค์•ผํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ด๋ฏธ pivot๋ณด๋‹ค ์ž‘๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์—ฌ๊ธฐ์„œ ๋ฉˆ์ถฐ์ค€๋‹ค.

์ด์ œ left์™€ right๊ฐ€ ์—ญ์ „๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด(left<right) ๋‘ ์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.

์ด์ œ ๊ณ„์† ์œ„์™€ ๊ฐ™์ด left์™€ right๋ฅผ ์›€์ง์—ฌ์ค€๋‹ค. left๋Š” 5๋ณด๋‹ค ํฐ ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ ๊นŒ์ง€, right๋Š” 5๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ ๊นŒ์ง€ ์›€์ง์ธ๋‹ค.

left์™€ right๊ฐ€ ์—ญ์ „๋˜์—ˆ์œผ๋‹ˆ ๋‘ ์ˆ˜๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ๋‘ ์ˆ˜๊ฐ€ ์—ญ์ „๋œ ์ง€๊ธˆ ์ˆœ๊ฐ„์„ ์ž˜ ๊ด€์ฐฐํ•˜๋ฉด right๋ถ€ํ„ฐ ์™ผ์ชฝ์€ 5๋ณด๋‹ค ์ž‘์€ ์ˆ˜, left๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์€ 5๋ณด๋‹ค ํฐ ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ 5์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋Š” right์™€ left์‚ฌ์ด์ด๋‹ค. 

์ด์ œ right์™€ pivot์„ ๋ฐ”๊ฟ”์ฃผ๋ฉด 5๋Š” ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋“ค์–ด๊ฐ”๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ดํ›„ ์žฌ๊ท€์ ์œผ๋กœ 5์˜ ์™ผ์ชฝ ๋ฐฐ์—ด๊ณผ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜ํ•˜๋‚˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋ฐฐ์น˜ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ํ€ต์ •๋ ฌ์ด๋‹ค.

์ฝ”๋“œ

์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. pivot์€ ๊ฐ€์žฅ ์™ผ์ชฝ ์›์†Œ๋ฅผ ์„ ํƒํ•˜๋„๋ก ํ–ˆ๋‹ค.

#include <iostream>
#include <vector>
using namespace std;

void swap(vector<int>& arr, int st, int en) {
    int tmp = arr[st];
    arr[st] = arr[en];
    arr[en] = tmp;
}

int parti(vector<int>& arr, int st, int en) {
    int pivot = arr[st];
    int left = st + 1;
    int right = en;

    while (left <= right) {
        while (left <= en && arr[left] <= pivot)left++;
        while (right > st && arr[right] > pivot)right--;

        if (left < right)swap(arr, left, right); //์•ž์„œ 2, 7์„ ๋ฐ”๊พผ ์ฝ”๋“œ
    }
    swap(arr, right, st); //์•ž์„œ 5์™€ 2๋ฅผ ๋ฐ”๊พผ ์ฝ”๋“œ
    return right; //์ •๋ ฌ์ด ์™„๋ฃŒ๋œ 5์˜ ์œ„์น˜ ๋ฆฌํ„ด
}

void quickSort(vector<int>& arr, int st, int en) {
    if (st >= en)return;

    int partition = parti(arr, st, en);
    quickSort(arr, st, partition - 1); //์ •๋ ฌ์ด ์™„๋ฃŒ๋œ 5์˜ ์™ผ์ชฝ ๋ถ€๋ถ„ ์ •๋ ฌ
    quickSort(arr, partition + 1, en); //์ •๋ ฌ์ด ์™„๋ฃŒ๋œ 5์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ์ •๋ ฌ
}
int main() {
    vector<int> arr = { 5,4,1,7,6,2 };
    quickSort(arr, 0, arr.size() - 1);
    
    for (auto k : arr) {
        cout << k << " ";
    }
}

 

 ํŠน์ง•

ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(nlogn)์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ™์€ O(nlogn)์ธ ๋‹ค๋ฅธ ์ •๋ ฌ๋ณด๋‹ค๋„ ๋น ๋ฅด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์•ž์„œ ๋ดค๋“ฏ์ด pivot์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ฐฐ์—ด์„ ์กฐ๊ธˆ์”ฉ ์ •๋ ฌํ•˜๊ณ (2, 7 ์Šค์™‘), 5์™€ ๊ฐ™์ด ์œ„์น˜๊ฐ€ ํ™•์ •๋œ ์›์†Œ๋“ค์€ ์ดํ›„ ์ •๋ ฌ์—์„œ ์ œ์™ธ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ pivot์„ ๊ธฐ์ค€์œผ๋กœ ์ชผ๊ฐœ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— pivot์ด ๊ณ„์†ํ•ด์„œ ๋ฐฐ์—ด ๋‚ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์œผ๋กœ ์„ ์ •๋œ๋‹ค๋ฉด O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. 

 ์‹ค์Šต

์ง์ ‘ ์ง  ํ€ต์ •๋ ฌ ์ฝ”๋“œ๋Š” ์•„๋ž˜ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

ํ•จ๊ป˜๋ณด๋ฉด ์ข‹์€ ๊ธ€

ํ€ต์†ŒํŠธ๊ฐ€ ๋น ๋ฅธ ์ด์œ : Locality์˜ ๊ด€์ ์—์„œ
https://sdcodebase.tistory.com/34

 

Locality์˜ ๊ด€์ ์—์„œ Quick sort๊ฐ€ Merge sort๋ณด๋‹ค ๋น ๋ฅธ์ด์œ 

Quick sort์™€ Merge sort๋Š” nlogn์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š” ๋Œ€ํ‘œ์ ์ธ ์ •๋ ฌ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Quick sort๊ฐ€ Merge sort๋ณด๋‹ค ๋น ๋ฅด๋‹ค. ๊ทธ ์ด์œ ๋Š” Locality์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค. Locality์˜ ๊ฐœ๋…์„ ์•Œ์•„๋ณด๊ณ  ์™œ Quick sort๊ฐ€

sdcodebase.tistory.com

https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ€ต ์ •๋ ฌ(quick sort)์ด๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io