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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ :: Merge Sort Algorithm implementing by java

by Wonit 2020. 6. 20.
package theory.sort;

import java.util.Arrays;

public class MergeSort {

    static int[] sorted;

    public static void main(String[] args) {
        int[] arr = {4, 3, 9, 2, 7, 1, 6, 5, 8};
        sorted = new int[arr.length];

        mergeSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }

    private static void mergeSort(int[] arr, int start, int end){
        if(start < end) {
            int mid = (start + end) / 2;
            mergeSort(arr, start, mid);
            mergeSort(arr, mid + 1, end);
            merge(arr, start, mid, end);
        }
    }

    private static void merge(int[] arr, int start, int mid, int end){
        int i, j, k, l;
        i = start; // ์‹œ์ž‘ ์ž„์‹œ ์ธ๋ฑ์Šค ๊ฐ’
        j = mid + 1; // ์ค‘๊ฐ„ ์ž„์‹œ ์ธ๋ฑ์Šค ๊ฐ’
        k = start; // ์‹œ์ž‘ ์ž„์‹œ ์ธ๋ฑ์Šค ๊ฐ’(์ž„์‹œ ๋ฐฐ์—ด index ์˜ ์—ญํ• )

        while(i <= mid && j <= end) { // ์•ž ๋ฐฐ์—ด๊ณผ ๋’ท ๋ฐฐ์—ด ์ค‘ ๋จผ์ € ์ซ‘๋‚˜๋Š” ๋ฐฐ์—ด์ด ์žˆ์„ ๋–„ ๊นŒ์ง€ ๋ฐ˜๋ณต
            if(arr[i] <= arr[j]) sorted[k++] = arr[i++];
            else sorted[k++] = arr[j++];
        }

        /*์•ž ๋ฐฐ์—ด์ด๋˜ ๋’ท ๋ฐฐ์—ด์ด๋˜ ๋จผ์ € ์ซ‘๋‚˜์ง€ ์•Š์€ ๋ฐฐ์—ด์˜ ๋‚จ์€ ๊ฐ’(์ •๋ ฌ๋œ ๊ฐ’)์„ ์ž„์‹œ ๋ฐฐ์—ด์— ๋„ฃ๋Š” ์ž‘์—…*/
        if(i <= mid) for(l = i; l <= mid; l++) sorted[k++] = arr[l];
        else for(l = j; l <= end; l++) sorted[k++] = arr[l];
        /*if(i > mid) for(l = j; l <= end; l++) sorted[k++] = arr[l];
        else for(l = i; l <= mid; l++) sorted[k++] = arr[l];*/

        /*์ •๋ ฌ๋œ ์ž„์‹œ ๋ฐฐ์—ด์„ ์™„์„ฑ๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋กœ*/
        for(l = start; l <= end; l++) arr[l] = sorted[l];
    }
}

๋Œ“๊ธ€