티스토리 뷰

프로그래밍

C++ 합병 정렬 merge sort

두덕리온라인 2021. 7. 17. 13:51
728x90
반응형

C++ merge sort 합병 정렬 알고리즘

void merge(vector<int>& nums, int left, int middle, int right) {
    vector<int> tmp (right - left +1);// 임시버퍼
    int i = left;// 왼쪽에서 시작
    int j = middle+1;// 가운데에서 시작 
    int k = 0;
    
    // 왼쪽과 가운데에서 시작하여 작거나 같으면 왼쪽으로 복사 
    while(i <= middle && j <= right) {
        if(nums[i] <= nums[j]) 
            tmp[k++] = nums[i++];
        else
            tmp[k++] = nums[j++];              
    }
    // 루프에서 남은것을 복사함(왼쪽)
    while(i <= middle) {
        tmp[k++] = nums[i++];
    }
    // 루프에서 남은것을 복사함(오른쪽)
    while(j <= right) {
        tmp[k++] = nums[j++];
    }
    // tmp에 있는것을 nums에 복사
    for(i=0; i<k; i++) {
        nums[left + i] = tmp[i];
    }
}

void mergeSort(vector<int> &nums, int left, int right) {
    if(left >= right)
        return;
    int middle = left + (right - left) / 2;
    mergeSort(nums, left, middle);
    mergeSort(nums, middle+1, right);
    merge(nums, left, middle, right);        
}
반응형

'프로그래밍' 카테고리의 다른 글

C++ 퀵 정렬 quick sort  (0) 2021.07.17
C++ 문자열 숫자 변환하기  (0) 2021.06.28
Java - Split Array Largest Sum (Hard, LeetCode)  (0) 2021.06.26
Java - Merge Sort 합병 정렬  (0) 2021.06.03
LeetCode - MinStack  (0) 2021.06.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday