一组数,求最少交换几次使得数组有序

http://www.lightoj.com/volume_showproblem.php?problem=1166

从后往前贪心,把i位置上的数放到i位置上(对不起,我只知道AC)

View Code
#include<stdio.h>
#include<iostream>
using namespace std;
int a[110];
int main()
{
int t,n,i,j,cases=1;
scanf("%d",&t);
for(cases=1;cases<=t;cases++)
{
int tot=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=n;i>=1;i--)
if(a[i]!=i)
{
tot++;
for(j=i-1;j>=1;j--)
{
if(a[j]==i)
{
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
printf("Case %d: %d\n",cases,tot);
}
}



posted @ 2012-03-08 20:32  Because Of You  Views(698)  Comments(0Edit  收藏  举报