#include<bits/stdc++.h>
using namespace std;
int s1,s2;
void f1(int a[],int n)
{
for(int i=0; i<=n-2; i++)
for(int j=0; j<=n-i-2; j++)
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
s1++;
}
}
void f2(int b[],int l,int r)
{
int x=b[l],i=l,j=r;
if(l>=r)return;
while(i<j)
{
while(i<j&&b[j]>=x)j--;
if(i!=j)
{
b[i]=b[j];
s2++;
}
while(i<j&&b[i]<=x)i++;
if(i!=j)
{
b[j]=b[i];
s2++;
}
}
b[i]=x;
f2(b,l,i-1);
f2(b,i+1,r);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int a[10050],b[10050];
s1=s2=0;
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
f1(a,n);
f2(b,0,n-1);
printf("%d %d\n",s1,s2);
}
}
SDUT3399数据结构实验之排序二:交换排序
最新推荐文章于 2018-04-23 19:39:59 发布