SDUT3399数据结构实验之排序二:交换排序

来源:互联网 发布:埃摩森猎头公司知乎 编辑:程序博客网 时间:2024/06/07 07:01
#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);    }}

0 0
原创粉丝点击