1089. Insert or Merge (25)

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	int n;
	scanf("%d", &n);

	int i, ori[110], cur[110];
	for(i = 1; i <= n; i++)
	{
		scanf("%d", &ori[i]);
	}

	for(i = 1; i <= n; i++)
	{
		scanf("%d", &cur[i]);
	}

	for(i = 2; i <= n; i++)
	{
		if(cur[i] < cur[i - 1])
		{
			break;
		}
	}

	int j;
	for(j = i; j <= n; j++)
	{
		if(ori[j] != cur[j])
		{
			break;
		}
	}

	int flag = 0, index[2], group;
	if(j == n + 1)
	{
		printf("Insertion Sort\n");
		sort(ori + 1, ori + i + 1);
	}
	else
	{
		printf("Merge Sort\n");

		for(i = 2; flag == 0; i *= 2)
		{
			for(j = 1; j <= n; j++)
			{
				if(ori[j] != cur[j])
				{
					break;
				}
			}

			if(j == n + 1)
			{
				flag = 1;
			}

			group = n / i;
			if(n % i > 0)
			{
				group++;
			}

			for(j = 1; j <= group; j++)
			{
				index[0] = (j - 1) * i + 1;
				index[1] = j * i + 1;

				if(index[1] > n + 1)
				{
					index[1] = n + 1;
				}

				sort(ori + index[0], ori + index[1]);
			}
		}
	}

	for(i = 1; i <= n; i++)
	{
		if(i > 1)
		{
			printf(" ");
		}

		printf("%d", ori[i]);
	}

	printf("\n");

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:21  王景迁  阅读(2)  评论(0)    收藏  举报

导航