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];
}
}
๐ป Computer Science/- Data Structure, Algorithm
๋๊ธ