#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;
}
Sorting A Three-Valued Sequence
最新推荐文章于 2012-10-19 09:11:39 发布