UTF-404

Merge Sort ๊ตฌํ˜„(Java) ๋ณธ๋ฌธ

ํ”„๋กœ์ ํŠธ

Merge Sort ๊ตฌํ˜„(Java)

UTF-404 2024. 3. 1. 15:54
728x90

๐Ÿ’ก Merge Sort๋ž€?

ํ•ฉ๋ณ‘ ์ •๋ ฌ ๋˜๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌ(์˜์–ด: merge sort ๋จธ์ง€ ์†ŒํŠธ)์€ O(n log n) ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ ์ด ์ •๋ ฌ์€ ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•˜๋ฉฐ, ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜์ด๋‹ค. ์กด ํฐ ๋…ธ์ด๋งŒ์ด 1945๋…„์— ๊ฐœ๋ฐœํ–ˆ๋‹ค.

 

๋ถ„๋ฅ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ž๋ฃŒ๊ตฌ์กฐ ๋ฐฐ์—ด
์ตœ์•… ์‹œ๊ฐ„๋ณต์žก๋„ O(n log n)
์ตœ์„  ์‹œ๊ฐ„๋ณต์žก๋„ O(n log n)
ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„ ์ผ๋ฐ˜์ ์œผ๋กœ, O(n log n)
๊ณต๊ฐ„๋ณต์žก๋„ ะž(n)

 

<์ฐธ๊ณ >

https://ko.wikipedia.org/wiki/%ED%95%A9%EB%B3%91_%EC%A0%95%EB%A0%AC

 

ํ•ฉ๋ณ‘ ์ •๋ ฌ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ํ•ฉ๋ณ‘ ์ •๋ ฌ ๋˜๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌ(์˜์–ด: merge sort ๋จธ์ง€ ์†ŒํŠธ[*])์€ O(n log n) ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ ์ด ์ •๋ ฌ์€ ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•˜๋ฉฐ,

ko.wikipedia.org

 

๐Ÿ’ก Merge Sort - Java Code ๊ตฌํ˜„

import java.util.*;

public class Merge_Sort {

    public static int[] src;
    public static int[] tmp;
    
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	
        int n = sc.nextInt();
        src = new int[n];
        
        for(int i=0; i<n; i++) {
        	src[i] = sc.nextInt();
        }
    	
        tmp = new int[src.length];
        
        merge(0, src.length-1);
        print(src);
        sc.close();
    }

    public static void merge(int left, int right) {
        if (left<right) {
            int mid = (left+right) / 2;
            merge(left, mid);
            merge(mid+1, right);

            int l = left;
            int r = mid + 1;
            int idx = l;

            while (l<=mid || r<=right) {
                if (r>right || (l<=mid && src[l]<src[r])) {
                    tmp[idx++] = src[l++];
                } else {
                    tmp[idx++] = src[r++];
                }
            }

            for (int i=left;i<=right;i++) {
                src[i]=tmp[i];
            }
        }
    }

    public static void print(int[] a) {
        for (int i=0;i<a.length;i++)
            System.out.print(a[i]+" ");
        System.out.println();
    }
}

 

๐Ÿ“ Test Case ์ถœ๋ ฅ ํ™•์ธ

Merge Sort Test case ํ™•์ธํ•˜๊ธฐ

728x90