Little Jay

Quick Sort, MergeSort with 백준 2751번 본문

알고리즘/DataStructure

Quick Sort, MergeSort with 백준 2751번

Jay, Lee 2022. 3. 28. 16:52

사실상 내가 쓰려고 만든 sort

#include <iostream>
#define endl '\n'
using namespace std;

int arr[1000001];

void merge(int* data, int start, int mid, int end) {
	int n1 = mid - start + 1;
	int n2 = end - mid;

	int* left = new int[n1];
	int* right = new int[n2];

	//left와 right작업을 통해서 지정된 인덱스까지 배열 복사
	for (int i = 0; i < n1; i++) {
		left[i] = data[start + i];
	}

	for (int i = 0; i < n2; i++) {
		right[i] = data[mid + i + 1];
	}

	int i = 0, j = 0;
	int k = start;

	//swap해주는 작업
	while(i < n1 && j < n2) {
		if (left[i] <= right[j]) {
			data[k] = left[i];
			i++;
		}
		else {
			data[k] = right[j];
			j++;
		}
		k++;
	}
	//복구해주는 작업
	while (i < n1) {
		data[k] = left[i];
		i++; k++;
	}
	while (j < n2) {
		data[k] = right[j];
		j++; k++;
	}

	delete[] left;
	delete[] right;
	left = nullptr;
	right = nullptr;

	return;
}

void merge_sort(int* data, int start, int end) {
	if (start < end) {
		int mid = (start + end) / 2;
		merge_sort(data, start, mid);
		merge_sort(data, mid + 1, end);
		merge(data, start, mid, end);
	}
	return;
}

void quick_sort(int *data, int start, int end) {
	if (start >= end) return;

	int pivot = start;
	int i = pivot + 1;
	int j = end;

	while (i <= j) {
		while (i <= end && data[i] <= data[pivot]) 
			i++;
		while (j > start && data[j] >= data[pivot]) 
			j--;

		if (i > j) {
			int temp = data[j];
			data[j] = data[pivot];
			data[pivot] = temp;
		}
		else {
			int temp = data[i];
			data[i] = data[j];
			data[j] = temp;
		}
	}

	quick_sort(data, start, j - 1);
	quick_sort(data, j + 1, end);
}

int main() {

	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int n; cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}

	merge_sort(arr, 0, n - 1);

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

	return 0;
}

'알고리즘 > DataStructure' 카테고리의 다른 글

[C++] 자료구조/Queue 구현  (0) 2022.01.04
[C++] 자료구조/Stack 구현  (0) 2021.11.20
Linked List Simple Question  (0) 2021.09.25
[C++] 자료구조/LinkedList 구현  (0) 2021.08.28
[C++] 자료구조/Array 구현  (0) 2021.07.22
Comments