1067. Sort with Swap(0) (25)

#include <iostream>

using namespace std;

int index[100010], num[100010];

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

	int i, count = 0;
	for(i = 0; i < n; i++)
	{
		scanf("%d", &num[i]);

		index[num[i]] = i;
		if(num[i] != i)
		{
			count++;
		}
	}

	int res = 0, temp, curindex, curnum;
	i = 1;

	while(count > 0)
	{
		if(num[0] == 0)
		{
			while(i < n)
			{
				if(num[i] != i)
				{
					temp = num[i];

					num[i] = 0;
					index[0] = i;

					num[0] = temp;
					index[temp] = 0;

					i++;
					count++;
					res++;

					break;
				}

				i++;
			}
		}

		curnum = index[0];
		curindex = index[curnum];
		
		num[curindex] = 0;
		index[0] = curindex;

		num[curnum] = curnum;
		index[curnum] = curnum;

		res++;
		count--;

		if(num[0] == 0)
		{
			count--;
		}
	}

	printf("%d\n", res);

	system("pause");
	return 0;
}

 

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

导航