Sorting A Three-Valued Sequence

#include<fstream>
#include<iostream>
using namespace std;
int main()
{
	ifstream fin ("sort3.in");
	ofstream fout ("sort3.out");
	int i,j;
	int n ,count=0;
	int a[1001],number[3]={0};
	fin>>n;
	for(i=1;i<=n;i++)
	{
		fin>>a[i];
	}
	for(i=1;i<=n;i++)
	{
		if(a[i]==1)
			number[1]+=1;
		else if(a[i]==2)
			number[2]+=1;
	}
	//首先確定1的位置,從a[1]--a[number[1]]開始掃描,找到2的話就從a[number[1]+1]--a[n]掃描,找到1的話就交換,count++
	//再次從a[1]--a[number[1]]掃描,找到3就從a[n]--a[number[1]+1]掃面,找到1的話就交換,count++
	//然後確定2的位置,從a[number[1]+1]--a[number[1]+number[2]]開始掃描,找到3的話就從a[number[1]+number[2]+1]--a[n]開始掃描,找到2的話就交換,count++
	for(i=1;i<=number[1];i++)//找2
	{
		if(a[i]==2)
		{
			for(j=number[1]+1;j<=n;j++)
			{
				if(a[j]==1)
				{
					int temp;
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
					count++;
					break;
				}
			}
		}
	}
	for(i=1;i<=number[1];i++)//找3
	{
		if(a[i]==3)
		{
			for(j=n;j>=number[1]+1;j--)
			{
				if(a[j]==1)
				{
					int temp;
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
					count++;
					break;
				}
			}
		}
	}
	for(i=number[1]+1;i<=number[1]+number[2];i++)//找3
	{
		if(a[i]==3)
		{
			for(j=number[1]+number[2]+1;j<=n;j++)
			{
				if(a[j]==2)
				{
					int temp;
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
					count++;
					break;
				}
			}
		}
	}
	fout<<count<<endl;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章