merge sorted array

김대익·2022년 3월 31일
0

정렬이 되어 있는 num1,2 배열을 합쳐
num1,2가 정렬되어 합쳐진 새로운배열을 num1으로 만들어라

여기서 nums1의 0은 nums2의 크기만큼 미리 자리를 만들어둔 것이다.
인수로 각 배열이 가지고있는 숫자개수를 m, n으로 입력받는다
nums1 = [1, 2, 3, 0, 0, 0]
nums2 = [2, 5, 6]


이 때의 time complexity는 O(n+m)이다

void merge (int [] nums1, int m, int [] nums2, int n) {
	int num1Idx = m - 1; //nums1배열 마지막 숫자 인덱스
    int num2Idx = n - 1; //nums2배열 마지막 숫자 인덱스
    int wIdx = nums.length - 1; // nums1배열 맨 마지막부터 써내려갈 index
    
    if (num2Idx < 0) { // nums2에 쓸 숫자가 없다면 종료
    	return;
    }
    
    while (0 <= num1Idx && 0 <= num2Idx) {
    	int num1 = nums1[num1Idx];
        int num2 = nums2[num2Idx];
        if (num2 <= num1) { // num1이 더크면 wIdx에 num1을 기록하고 num1, wIdx를 왼쪽으로
        	int num = num1;
            num1[wIdx] = num;
            num1Idx--;
            wIdx--;
        } else {
        	int num = num2;
            num1[wIdx] = num;
            num2Idx--;
            wIdx--;
        }	
    }
    while (0 <= num2Idx) { 
    //nums2에 있는 값을 이미 다 옮겼다면 num1, num2가 비교가 안돼 
    //num1,2비교로는 처리가 불가능하므로
    	nums1Idx[wIdx] = nums2[num2Idx];
        nums2Idx--;
        wIdx--;
    }
}

0개의 댓글