#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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.