머지소트 코드

#include <iostream>

using namespace std;
int a[10] = { 5,4,3,2,1 ,457,5412,879456,45120,6523};

//합치기
void m_sort(int list[], int l, int m, int r)
{
	int i, j, k;
	i = l;
	j = m + 1;
	k = l;
	int temp[11];
	//왼쪽에서 정렬된 배열과 오른쪽에서 정렬된 배열을 합침
	//둘중 하나가 끝까지 올때 까지 합침
	while (i <= m && j <= r)
	{
		if (list[i] <= list[j])
			temp[k++] = list[i++];
		else
			temp[k++] = list[j++];
	}
	//오른쪽 배열에 임시 배열로 추가할 수가 남았으면 오른쪽 배열을 임시 배열로 복사
	if (i > m)
	{
		for (int x = j; x <= r; x++)
			temp[k++] = list[x];
	}
	//왼쪽 배열에 임시 배열로 추가할 수가 남았으면 왼쪽 배열을 임시 배열로 복사
	else
	{
		for (int x = i; x <= m; x++)
			temp[k++] = list[x];
	}

	//본 배열으로 복귀
	for (int x = l; x <= r; x++)
		list[x] = temp[x];
}
void merge(int list[], int l, int r)
{
	int mid;
	if (l < r)
	{
		mid = (l + r) / 2;
		merge(list, l, mid);
		merge(list, mid + 1, r);
		m_sort(list, l, mid, r);
	}
}
int main()
{
	merge(a,0,9);
	for (int i = 0; i < 10; i++)
	{
		cout << a[i] << " ";
	}
	return 0;
}

좋은 웹페이지 즐겨찾기