티스토리 뷰
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