본문 바로가기

개인공부

Merge Sort

반응형

시간복잡도 O(N log N) 

 

최악의 경우에도 보장된다. 하지만 공간복잡도가 QickSort보다 두배크다.

 

package sasum;

public class myTest {
	private static void mergeSort(int[] arr) {
		int[] tmp = new int[arr.length];
		mergeSort(arr, tmp, 0, arr.length - 1);
	}

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

	private static void merge(int[] arr, int[] tmp, int start, int mid, int end) {

		int i = start;
		int j = mid + 1;
		int k = start;

		while (i <= mid && j <= end) {
			if (arr[i] > arr[j]) {
				tmp[k++] = arr[j++];
			} else {
				tmp[k++] = arr[i++];
			}
		}
		
		if(i>mid) {
			while(j <= end) tmp[k++] = arr[j++];
		}else {
			while(i <= mid) tmp[k++] = arr[i++];
		}
		
		for(int n = start;n<=end;n++) arr[n] = tmp[n];

	}

	public static void main(String[] args) {
		int[] arr = {3, 9, 4, 7, 5, 0, 1, 6, 8, 2};
		mergeSort(arr);
		
		for(int a : arr) {
			System.out.print(a+" ,");
		}
		System.out.println();
	}
}
반응형

'개인공부' 카테고리의 다른 글

소프트웨어 개발 생명주기  (0) 2020.06.26
블랙박스/ 화이트박스 테스트  (0) 2020.06.26
Quick Sort  (0) 2020.06.24
B-Tree  (0) 2020.06.24
AVL Tree  (0) 2020.06.23