1. ํ€ต์ •๋ ฌ(Quick Sort) ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉ, ์ผ์ •ํ•˜์ง€ ์•Š์€ ํ˜•ํƒœ๋กœ ๋ถ„ํ• . ์ˆ˜ํ–‰์†๋„ ๋น ๋ฆ„
    → ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ„์–ด์„œ ๊ฐ๊ฐ์„ ํ’€๋ฉด์„œ ๋‹ค์‹œ ํ•ฉ๋ณ‘ํ•˜์—ฌ ๋ฌธ์ œ์˜ ๋‹ต์„ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ”ผ๋ด‡(pivot)์ด๋ผ ๋ถ€๋ฅด๋Š” ๋ฐฐ์—ด ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ”ผ๋ด‡๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์œ„์น˜ํ•˜๋„๋ก ๋ถ„ํ• .
    ์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ถ„ํ• ๋œ ์™ผ์ชฝ ๋ฐฐ์—ด๊ณผ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์—๋„ ๋™์ผํ•œ ๊ณผ์ •์„ ์ˆ˜ํ–‰. ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ์ •๋ ฌ๋˜๋Š” ๋ฐฉ์‹.
    → ์ฃผ์˜ : ํ”ผ๋ด‡์€ ๋ถ„ํ• ๋œ ์™ผํŽธ์ด๋‚˜ ์˜ค๋ฅธํŽธ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ.

1-1. ํ€ต์ •๋ ฌ์˜ ํ”ผ๋ด‡ ์„ ์ •๋ฐฉ๋ฒ•

  • โ‘  ๋žœ๋คํ•˜๊ฒŒ ์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • โ‘ก 3๊ฐœ์˜ ์ˆซ์ž์˜ ์ค‘์•™ ๊ฐ’์œผ๋กœ ์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
    → ๊ฐ€์žฅ ์™ผ์ชฝ ์ˆซ์ž / ์ค‘๊ฐ„์ˆซ์ž / ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์ˆซ์ž ์ค‘์—์„œ ์ค‘์•™๊ฐ’์œผ๋กœ ํ”ผ๋ด‡์„ ์ •ํ•จ
  • โ‘ข Median-of-Medians
    → ๋ฐฐ์—ด์„ 3๋“ฑ๋ถ„ ํ›„, ๊ฐ ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ ์ˆซ์ž / ์ค‘๊ฐ„ ์ˆซ์ž / ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ˆซ์ž ์ค‘์—์„œ ์ค‘์•™๊ฐ’์„ ์ฐพ์€ ํ›„,
         ์„ธ ์ค‘์•™๊ฐ’๋“ค ์ค‘์—์„œ ์ค‘์•™๊ฐ’์œผ๋กœ ํ”ผ๋ด‡์„ ์ •ํ•จ

โ‘ข Median-of-Medians

 

 

 

2. ํ€ต์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌํ˜„

# include <stdio.h>
# define LEN 7
 
void quickSort(int arr[], int L, int R) {
      int left = L, right = R;
      int pivot = arr[(L + R) / 2];    // pivot ์„ค์ • (๊ฐ€์šด๋ฐ) 
      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 ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ ์ด๋™*/
            left++;
            right--;
        }
      } while (left<= right);    // left๊ฐ€ right ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต 
 
    /* recursion */
    if (L < right)
        quickSort(arr, L, right);    // ์™ผ์ชฝ ๋ฐฐ์—ด ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณต 
 
    if (left < R)
        quickSort(arr, left, R);    // ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด ์žฌ๊ท€์ ์œผ๋กœ ๋ฐ˜๋ณต 
}
 
int main(){
  int i;
  int arr[LEN] = {5,1,6,3,4,2,7};
  printf("์ •๋ ฌ ์ „ : ");
  for(i=0; i<LEN; i++){
    printf("%d ", arr[i]);
  }
  printf("\n");
    
  quickSort(arr, 0, LEN-1);
  
  printf("์ •๋ ฌ ํ›„ : ");
  for(i=0; i<LEN; i++){
    printf("%d ", arr[i]);
  }
  
  return 0; 
}

 

 

3. ํ€ต์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํŠน์ง•

3-1. ์žฅ์ 

  • ์ปค๋‹ค๋ž€ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ๊ฐ€์žฅ ์ข‹์€ ์„ฑ๋Šฅ
  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์Œ

3-2. ๋‹จ์ 

  • ๋ถˆ์•ˆ์ • ์ •๋ ฌ์ด๋‹ค.
  • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋Š” ํ€ต์ •๋ ฌ์˜ ๋ถˆ๊ท ํ˜• ๋ถ„ํ• ์— ์˜ํ•ด ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์˜คํžˆ๋ ค ๋” ๋งŽ์ด ๊ฑธ๋ฆผ

 

 

๋”๋ณด๊ธฐ

์ฐธ๊ณ ) https://bblackscene21.tistory.com/9

 

[ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ] ํ€ต์ •๋ ฌ ํ€ต์†ŒํŠธ(Quick Sort) - ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. python ํŒŒ์ด์ฌ)

ํ€ต ์ •๋ ฌ์ด๋ž€? ํ€ต ์ •๋ ฌ๋„ ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort) ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•  ๋•Œ, ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ ํ•ญ์ƒ ๊ฐ™์•˜์ง€๋งŒ, ํ€ต ์ •๋ ฌ์€ ์ผ์ •ํ•˜์ง€ ์•Š

bblackscene21.tistory.com

์ฐธ๊ณ ) https://gyoogle.dev/blog/algorithm/Quick%20Sort.html

 

ํ€ต ์ •๋ ฌ(Quick Sort) | ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป Tech Interview

ํ€ต ์ •๋ ฌ(Quick Sort) Goal Quick Sort์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. Quick Sort ๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. Quick Sort์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. Quick Sort์˜ ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. Quick Sort์˜ ์ตœ์•…์ธ

gyoogle.dev

+ Recent posts