개인공부용123 프로그래밍 블로그

MergeSort구현 본문

Algorithm/이론

MergeSort구현

개인공부용123 2017. 4. 28. 16:11

MergeSort를 구현했습니다.


각 함수별 기능 설명


Merge : 분할된 두 부분을 합쳐주는 기능을합니다.

MergeSort : 분할 정복을 이용해서 각각 Sort를 실행하는 함수입니다.



머지소트 사진에 대한 이미지 검색결과


위 사진과 같이 분할 정복을 통해서 머지소트가 실행됩니다.


Worst Case time Complexity

머지소트의 최악수행시간의 점화식은

W(n) = W(n/2) + W(n/2) + W(merge)(n)입니다.

이를 Master theorem을 이용해서 점화식을 풀면

O(nlogn)이라는 최악수행시간이 나옵니다.

즉 MergeSort의 최악수행시간 = O(nlogn)



#include 
#include 
using namespace std;

void Merge(vector& arr,int start, int mid, int end) {
	int first = start;
	int second = mid + 1;
	int pos = start;
	vector temp = arr;

	while (first <= mid && second <= end) {
		if (temp[first] <= temp[second]) {
			arr[pos++] = temp[first++];
		}
		else {
			arr[pos++] = temp[second++];	
		}
	}

	if (first > mid) {
		for (int i = second; i <= end; i++) {
			arr[pos++] = temp[i];
		}
	}
	else {
		for (int i = first; i <= mid; i++) {
			arr[pos++] = temp[i];
		}
	}
	
	return;

}

void MergeSort(vector& arr, int start, int end) {
	if (start < end) {
		int mid = (start + end) / 2;

		MergeSort(arr, start, mid);
		MergeSort(arr, mid + 1, end);
		Merge(arr, start, mid, end);
	}
}

int main() {
	std::ios::sync_with_stdio(false);
	vector arr;
	int C, n;

	cin >> C;

	for (int i = 0; i < C; ++i) {
		cin >> n;
		arr.push_back(n);
	}

	MergeSort(arr, 0, C - 1);

	for (int i = 0; i < C; ++i) {
		cout << arr[i] << " ";
	}
	cout << endl;

	arr.clear();
	return 0;
}

'Algorithm > 이론' 카테고리의 다른 글

BoJ 2751 && Accelerated HeapSort구현  (0) 2017.04.30
[백준] 2750 && Inplace QuickSort구현  (0) 2017.04.28
[백준] 2751번 문제 HeapSort구현  (0) 2017.04.27
[알고리즘] BinarySearch  (0) 2017.03.30