ํ€ต์ •๋ ฌ(QuickSort)์ด๋ž€?

2021. 12. 21. 22:16ยท๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ •๋ ฌ ๋ฐ ํƒ์ƒ‰
728x90

ํ€ต ์ •๋ ฌ(Quick Sort)

ํ€ต ์ •๋ ฌ์€ ํ•ฉ๋ณ‘์ •๋ ฌ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋ถ„ํ• ์ •๋ณต(Divide and Conquer) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

ํ‰๊ท ์ ์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ์ˆ˜ํ–‰ ์†๋„๋ฅผ ์ž๋ž‘ํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

 

1. ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ํ•œ ์š”์†Œ๋ฅผ ์„ ํƒํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ณ ๋ฅธ ์›์†Œ๋ฅผ pivot์ด๋ผ๊ณ  ํ•œ๋‹ค.
2. pivot์„ ๊ธฐ์ค€์œผ๋กœ pivot๋ณด๋‹ค ์ž‘์€ ์š”์†Œ๋“ค์€ ๋ชจ๋‘ pivot์˜ ์™ผ์ชฝ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  pivot๋ณด๋‹ค ํฐ ์š”์†Œ๋“ค์€ ๋ชจ๋‘ povot์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
3. pivot์„ ์ œ์™ธํ•œ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์ •๋ ฌํ•œ๋‹ค.
   3-1) ๋ถ„ํ• ๋œ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ๋ฆฌ์ŠคํŠธ๋„ ๋‹ค์‹œ pivot์„ ์ •ํ•˜๊ณ  pivot์„ ๊ธฐ์ค€์œผ๋กœ 2๊ฐœ์˜ ๋ถ€๋ถ„๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆˆ๋‹ค.
   3-2) ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋“ค์ด ๋”์ด์ƒ ๋ถ„ํ• ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ํ€ต์ •๋ ฌํ•œ๋‹ค๊ณ  ์น˜์ž. ๊ฐ€์žฅ ๋จผ์ € pivot์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, pivot์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ฐ€์žฅ ์•ž์˜ ์›์†Œ, ์ค‘๊ฐ„ ์›์†Œ, ํ˜น์€ ๊ฐ€์žฅ ๋’ค์˜ ์›์†Œ๋ฅผ ํƒํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ์ค‘๊ฐ„ ์›์†Œ๋ฅผ pivot๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ํƒํ•˜๊ฒ ๋‹ค.

 

  • ์ค‘๊ฐ„ ๊ฐ’์„ pivot์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์˜ ๊ฐ’์„ left, ์˜ค๋ฅธ์ชฝ์˜ ๊ฐ’์„ right๋กœ ์žก๋Š”๋‹ค.
  • left๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ, right๋Š” ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ
  • left๋Š” pivot๋ณด๋‹ค ํฐ ์ˆ˜๋ฅผ ๋งŒ๋‚˜๊ฑฐ๋‚˜ pivot์„ ๋งŒ๋‚˜๋ฉด ๋ฉˆ์ถ”๊ณ 
  • right๋Š” pivot๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ฅผ ๋งŒ๋‚˜๊ฑฐ๋‚˜ pivot์„ ๋งŒ๋‚˜๋ฉด ๋ฉˆ์ถ˜๋‹ค.
  • ๋”ฐ๋ผ์„œ 5๊ฐ€ 3๋ณด๋‹ค ํฌ๋ฏ€๋กœ left๋Š” 5์—์„œ ๋ฉˆ์ถ”๊ณ , 2๊ฐ€ 3๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ right๋Š” 2์—์„œ ๋ฉˆ์ถ˜๋‹ค.

  • left์™€ right๊ฐ€ ๋ฉˆ์ท„์„ ๋•Œ, left๊ฐ€ right๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ๋‹ค๋ฉด elft์™€ right๊ฐ’์„ ๊ตํ™˜ํ•ด์ค€๋‹ค.
  • ์ดํ›„ left๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ, right๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•ด์ค€๋‹ค.
  • ์œ„ ๊ณผ์ •์„ left๊ฐ€ right๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

  • 6์ด 3๋ณด๋‹ค ํฌ๋ฏ€๋กœ 6์—์„œ left๊ฐ€ ๋ฉˆ์ถ˜๋‹ค.
  • right๋Š” pivot์„ ๋งŒ๋‚˜์„œ ๋ฉˆ์ถ˜๋‹ค.
  • ์ด ๋•Œ left๊ฐ€ right๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ left์™€ right๊ฐ’์„ ๊ตํ™˜ํ•œ๋‹ค.
  • left๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ. right๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.
  • left๊ฐ€ right๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค.

right๊ฐ€ L๋ณด๋‹ค ํฌ๋‹ค๋ฉด L๋ถ€ํ„ฐ right๊นŒ์ง€ ๋‹ค์‹œ ์œ„ ๊ณผ์ •์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•œ๋‹ค.

left๊ฐ€ R๋ณด๋‹ค ์ž‘๋‹ค๋ฉด left๋ถ€ํ„ฐ R๊นŒ์ง€ ๋‹ค์‹œ ์œ„ ๊ณผ์ •์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

์™ผ์ชฝ ๋ถ€๋ถ„ ๋ฐฐ์—ด ์ •๋ ฌ ๊ณผ์ •

  • LEFT๋Š” 2์—์„œ ๋ฉˆ์ถ˜๋‹ค.
  • RIGHT๋Š” PIVOT์—์„œ ๋ฉˆ์ถ˜๋‹ค.
  • LEFT๊ฐ€ RIGHT๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ ๋‘˜์„ ๊ตํ™˜ํ•œ๋‹ค.
  • LEFT๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ, RIGHT๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ ์ด๋™ํ•œ๋‹ค.
  • LEFT๊ฐ€ RIGHT๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค.
  • ์ด๋•Œ RIGHT๊ฐ€ L๋ณด๋‹ค ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ์™ผ์ชฝ๋ฐฐ์—ด(L๋ถ€ํ„ฐ RIGHT)๋Š” ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • LEFT๋Š” R๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ LEFT๋ถ€ํ„ฐ R๊นŒ์ง€ ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ๋ฐฐ์—ด ์ •๋ ฌ ๊ณผ์ •

  • LEFT๋Š” 6์—์„œ ๋ฉˆ์ถ˜๋‹ค.
  • RIGHT๋Š” PIVOT์—์„œ ๋ฉˆ์ถ˜๋‹ค.
  • LEFT๊ฐ€ RIGHT๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ ๋‘˜์„ ๊ตํ™˜ํ•œ๋‹ค.
  • LEFT๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ, RIGHT๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ ์ด๋™ํ•œ๋‹ค.
  • LEFT๊ฐ€ RIGHT๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•œ๋‹ค.
  • ์ด๋•Œ RIGHT๊ฐ€ L๋ณด๋‹ค ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ์™ผ์ชฝ ๋ฐฐ์—ด (L๋ถ€ํ„ฐ RIGHT)์€ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • LEFT๋Š” R๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ LEFT๋ถ€ํ„ฐ R๊นŒ์ง€ ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํ€ต ์ •๋ ฌ ํŠน์ง•

  • ํ€ต์ •๋ ฌ์€ ์žฌ๊ท€์ ์œผ๋กœ ์ •์˜๋˜๋ฏ€๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ์— ๋”ฐ๋ฅธ ์Šคํƒ์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋•Œ ์Šคํƒ์˜ ๊นŠ์ด๋Š” N๊ฐœ์˜ ์›์†Œ์— ๋Œ€ํ•ด logN์— ๋น„๋ก€ํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(NlogN)์ด๋‹ค. ๋”ฐ๋ผ์„œ in-place ์ •๋ ฌ์ด๋ผ๊ณ  ํ•˜๊ธฐ ํž˜๋“ค์ง€๋งŒ, ์‹ค์šฉ์ ์œผ๋กœ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ”ํžˆ in-place ์ •๋ ฌ์ด๋ผ๊ณ  ๊ธฐ์ˆ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
  • ํ€ต์ •๋ ฌ์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ pivot์ด ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ ๋˜๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ์„ค์ ˆ๋œ๋‹ค๋ฉด ์›์†Œ n๊ฐœ์— ๋Œ€ํ•ด์„œ n๋ฒˆ, (n-1), (n-2)...1๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N^2)์ด ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(NlogN)์œผ๋กœ ๋งค์šฐ ๋น ๋ฅด๋‹ค. pivot ๊ฐ’์ด ์ ์ ˆํžˆ ์„ค์ •๋œ๋‹ค๋ฉด ๊ทธ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค. ๋”ฐ๋ผ์„œ pivot๊ฐ’์„ ์ž˜ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
  • ํ€ต์ •๋ ฌ์€ ์ค‘๋ณต๋œ ํ‚ค๊ฐ’์ด ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”๋€Œ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด not-stableํ•˜๋‹ค.

ํ€ต ์ •๋ ฌ ์ฝ”๋“œ

void quickSort(int arr[], int L, int R) {
    int left = L, right = R;
    int pivot = arr[(L + R) / 2];
    int temp;

    do {
        while (arr[left] < pivot) //left๊ฐ€ pivot ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋งŒ๋‚˜๊ฑฐ๋‚˜ pivot์„ ๋งŒ๋‚  ๋•Œ ๊นŒ์ง€
            left++;
        while (arr[right] > pivot)//right๊ฐ€ pivot๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๋งŒ๋‚˜๊ฑฐ๋‚˜ pivot์„ ๋งŒ๋‚  ๋–„ ๊นŒ์ง€
            right--;
        if (left <= right) { //left๊ฐ€ right๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ๋‹ค๋ฉด ๊ตํ™˜
            temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;

            left++; //์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ
            right--;//์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ
        }
    } while (left <= right); //left๊ฐ€ right๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์„ ๋–„ ๊นŒ์ง€ ๋ฐ˜๋ณต

    if (L < right)
        quickSort(arr, L, right); //์™ผ์ชฝ๋ฐฐ์—ด ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณต

    if (left < R)
        quickSort(arr, left, R); // ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณต
}
728x90
'๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ •๋ ฌ ๋ฐ ํƒ์ƒ‰' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)์ด๋ž€?
  • ์ •๋ ฌ(Sort Algorithm)์ด๋ž€?
  • ์‚ฝ์ž…์ •๋ ฌ(InsertionSort)์ด๋ž€?
  • ์„ ํƒ์ •๋ ฌ(Selection Sort)์ด๋ž€?
juno1105
juno1105
๊ณต๋ถ€ํ•˜๋Š” ๊ฒธ ํฌํด ๋ธ”๋กœ๊ทธ
  • juno1105
    @juno1105
    juno1105
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (89)
      • ๐Ÿ’ฌ ์ž์œ  (3)
      • ๐Ÿ“– ์–ดํ•™ ๊ณต๋ถ€ (0)
      • ๐Ÿ“” ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ (4)
      • ๐Ÿ›  ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• (1)
      • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (53)
        • ์Šคํƒ (4)
        • ํ (4)
        • ์ •๋ ฌ ๋ฐ ํƒ์ƒ‰ (17)
        • ๋ฆฌ์ŠคํŠธ (5)
        • ํ•ด์‹œ (1)
        • ํŠธ๋ฆฌ (8)
        • ํž™ (2)
        • ๊ทธ๋ž˜ํ”„ (12)
      • ๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ (0)
      • ๐Ÿšฅ ๋…ผ๋ฆฌํšŒ๋กœ (8)
      • ๐Ÿ”ฐ ๋ฐฑ์ค€ (20)
        • ํ, ์Šคํƒ, ๋ฑ (0)
        • DFS ์™€ BFS (3)
        • ๊ทธ๋ฆฌ๋”” (0)
        • ๋™์ ๊ณ„ํš๋ฒ• 1 (16)
        • ๋™์ ๊ณ„ํš๋ฒ• 2 (0)
        • ์ตœ๋‹จ ๊ฒฝ๋กœ (0)
        • ํŠธ๋ฆฌ (0)
        • ๋ฐฑํŠธ๋ž˜ํ‚น (0)
        • ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ (0)
        • ์ง‘ํ•ฉ๊ณผ ๋งต (1)
      • ๐ŸŒˆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (0)
      • ๐Ÿ“ฑ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ์ž๋ฃŒ๊ตฌ์กฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ปค๋ฆฌํ˜๋Ÿผโœจ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ† ์ต 950์ 
    ์ •๋ ฌ
    ํ† ์ต 920์ 
    ํ† ์ต 910์ 
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ •๋ ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ
    ์‹œ๊ฐ„๋ณต์žก๋„
    ๋น…์˜คํ‘œ๊ธฐ๋ฒ•
    ์ตœ๋‹จ๊ฒฝ๋กœ
    ํ† ์ต 900
    ํ† ์ต 900์ 
    ํ† ์ต
    ํ† ์ต 900์ ๋Œ€
    ์ •๋ ฌ ์ตœ์„ ์˜ ๊ฒฝ์šฐ
    ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
juno1105
ํ€ต์ •๋ ฌ(QuickSort)์ด๋ž€?
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”