๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜-์ด๋ก ] ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)

by Wonit 2019. 11. 23.

๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)๋ž€?

 

๋ณ‘ํ•ฉ์ •๋ ฌ์€ ์•ž์„œ ์„ค๋ช…ํ•œ ์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ๊ณผ๋Š” ๋น„๊ต ํ•  ์ˆ˜ ์—†๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„์ธ O(n log n)์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

ํ˜„๋Œ€์˜ ์ปดํ“จํ„ฐ ๊ฐœ๋…์˜ ์‹œ์ดˆ๊ฐ€ ๋˜์—ˆ๋–ค ํฐ ๋…ธ์ด๋งŒ(John von Neumann)์ด ์ œ์•ˆํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์ค‘ ํ•˜๋‚˜์ด๋‹ค.


์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ์˜ ํšจ์œจ์„ ๊ทน๋Œ€ํ™” ์‹œ์ผฐ๋‹ค.

 

๊ณผ์ •

  • ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์œผ๋กœ ์ž˜๋ผ ๋น„์Šทํ•œ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„์˜ ๋ฐฐ์—ด์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

  • ๊ฐ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 0์ด ๋  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ณ  0์ด ๋˜๋ฉด ๊ฐ ๋ถ€๋ถ„์„ ์žฌ๊ท€์ ์œผ๋กœ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ํ•ฉ์น˜๋Š” ๊ณผ์ •์ด ์ˆ˜ํ–‰๋  ๋•Œ ์‹ค์งˆ์  ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋‹จ๊ณ„๋ฅผ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

1. ๋ถ„ํ•  : ์ž…๋ ฅ ๋ฐฐ์—ด์„ ๊ฐ™์€ ํฌ๊ธฐ์˜ 2 ๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•œ๋‹ค.
2. ์ •๋ณต : ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ฆฌํ•œ๋‹ค. ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์ง€ ์•Š์œผ๋ฉด ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด ๋‹ค์‹œ ๋ถ„ํ•  ์‹œํ€€์Šค๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
3. ๊ฒฐํ•ฉ : ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ๊ฒฐํ•ฉ์‹œํ‚จ๋‹ค.

pseudo code

mergeSort(A[], p, r){
    if(p<r) then {                        .... 1
        q <- (p+r) / 2;                    .... 2
        mergeSort(A, p, q);              .... 3
        mergeSort(A, q+1, r);            .... 4
        merge(A, p, q, r);                .... 5
    }
}

merge(A[], p, q, r){                    .... 6
    ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋‘ ๋ฐฐ์—ด A[p...q] ์™€ A[q+1...r]์„ ํ•ฉ์ณ         .... 7
    ์ •๋ ฌ๋œ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด A[p...r]์„ ๋งŒ๋“ ๋‹ค.                    .... 8
}

 

์ด์ค‘ merge๋ฅผ ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๊ธฐ์ˆ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

// A[p...q]์™€ A[q+1...r]์„ ๋ณ‘ํ•ฉํ•ด์„œ A[p...r]์„ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค.
// A[p...q]์™€ A[q+1...r]์€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.
merge{
    i <- p; j <- q+1; t <- 1;
    while(i<=1 and j<= r){
        if(A[i] <= A[j])
        then tmp[t++] <- A[i++];
        else tmp[t++] <- A[j++];
    }
    while(i <= q)
        tmp[t++] <- A[i++];
    while(j <= r)
        tmp[t++] <- A[j++];
    i <- p; t <- 1;
    while(i <= r)
        A[i++] <- tmp[t++];
}
- ....2 : ๋จผ์ € ๋ฐฐ์—ด์˜ ์ค‘์•™ ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด .... 2 ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์˜ ์ค‘์•™ q๋ฅผ ์ฐพ๋Š”๋‹ค.
- ....3 : A[1...q] ๊นŒ์ง€ ๋ฐฐ์—ด์— ๋˜ mergeSort๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
- ....4 : A[q+1 ... r] ๊นŒ์ง€ ๋ฐฐ์—ด์— ๋˜ mergeSort๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
- ....5 : ๋ถ„ํ• ํ–ˆ๋˜ ๋ชจ๋“  ๋ฐฐ์—ด์„ ํ•ฉ์นœ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)์˜ ์ž๋ฐ” ์ฝ”๋“œ

๋Œ“๊ธ€