백준 2751

Oak_Cassia·2022년 4월 1일
0

백준 2751
merge sort를 이용해 풀었다. 그런데 출력에서 std::endl 을 사용했을 때는 안됐는데 "\n"을 사용하니까 됐다. endl 은 버퍼를 flush해서 느리다고 한다.

#include<iostream>

class Merge
{
	int* temparr = nullptr;
	int* arr = nullptr;
	int size;
public:
	Merge(int n) :size(n)
	{
		arr = new int[size];
		temparr = new int[size];
		MakeArr();
	}
	~Merge()
	{
		if (arr != nullptr)
			delete[] arr;
	}

	void Sort()
	{
		MergeSort(0,size-1);
	}

	void Print()
	{
		for (int i = 0; i < size; i++)
		{
			std::cout << arr[i]<<"\n";
		}
	}

private:

	void MergeSort(int a, int z)
	{
		if (a >= z)
			return;
		int middle = (a + z) / 2;

		MergeSort(a,middle);
		MergeSort(middle+1,z);
		Merging(a,z,middle);
	}
	void Merging(int a, int z, int middle)
	{
		
		int left=a;
		int right=middle+1;
		for(int cnt = a; cnt<=z; cnt++)
		{
			if (left > middle)
			{
				temparr[cnt] = arr[right++];
				continue;
			}
			if (right > z)
			{
				temparr[cnt] = arr[left++];
				continue;
			}
			if (arr[left] < arr[right])
				temparr[cnt] = arr[left++];
			else
				temparr[cnt] = arr[right++];
		}

		for (int i = a; i <= z; i++)
			arr[i] = temparr[i];
		

	}

	void MakeArr()
	{
		for (int i = 0; i < size; i++)
		{
			std::cin >> *(arr + i);
		}
	}





};



int main()
{
	int n;
	std::cin >> n;
	Merge qarr(n);
	qarr.Sort();
	qarr.Print();
}
profile
rust로 뭐할까

0개의 댓글