Merge Sort

yoneeki·2022년 12월 30일
0

DSA기초

목록 보기
10/12

Merge Sort

/** merge method **/
	 public int[] merge(int[] array1, int[] array2) {
	        int[] combined = new int[array1.length + array2.length];
	        int index = 0;
	        int i = 0;
	        int j = 0;
	        while (i < array1.length && j < array2.length) {
	            if (array1[i] < array2[j]) {
	                combined[index] = array1[i];
	                index++;
	                i++;
	            } else {
	                combined[index] = array2[j];
	                index++;
	                j++;
	            }
	        }
	        while (i < array1.length) {
	            combined[index] = array1[i];
	            index++;
	            i++;
	        }
	        while (j < array2.length) {
	            combined[index] = array2[j];
	            index++;
	            j++;
	        } 
	        return combined;
	    }
	 
	 /** merge sort method **/
	// 1. recursive 2. using a merge method at the end
	public int [] mergeSort(int[] array) {
		if(array.length == 1) return array;
		
		int midIndex = array.length / 2;
		
		int[] left = mergeSort(Arrays.copyOfRange(array, 0, midIndex));
		int[] right = mergeSort(Arrays.copyOfRange(array, midIndex, array.length));
		
		return merge(left, right);
	}

Main

MergeSort me = new MergeSort();
		//int[] array1 = {1,3,7,8};
	    //int[] array2 = {2,4,5,6};
	    //System.out.println( Arrays.toString( me.merge(array1, array2) ) );
		
		int [] array = {1, 7, 3, 2};
		int [] array_new = me.mergeSort(array);
		System.out.println(Arrays.toString(array_new));
  • break down : O(log n)....배열을 아이템이 하나가 될 때까지 계속해서 반으로 쪼갠다. 이 작업을 재귀로 수행.
  • merging : O(n) ...... 다시 합침
  • merge sort : O(n log n)
profile
Working Abroad ...

0개의 댓글

관련 채용 정보