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

#include
#include
#include
using namespace std;
int sum=0,sum1=0;
int a[9999],b[9999];
void quk(int l,int r,int a[])
{
    int i,j;
    int key;
    if(l     {i=l;j=r;
    key=a[l];
    while(i     {
       while(i=key)
       j--;
       if(a[i]!=a[j])
       sum++;
       a[i]=a[j];
       while(i        i++;
       if(a[i]!=a[j])
       sum++;
       a[j]=a[i];
    }
    a[i]=key;
    quk(l,i-1,a);
    quk(i+1,r,a);
    }
}
void mao(int n,int a[])
{
   int t,i,j;
   for(i=0;i    {
       for(j=0;j        {
          if(a[j]>a[j+1])
          {
             t=a[j];
             a[j]=a[j+1];
             a[j+1]=t;
             sum1++;
          }
       }
   }
}
int main()
{
   int n;
   while(~scanf("%d",&n))
   {
      sum=0;
      sum1=0;
      int i;
      for(i=0;i       {
           scanf("%d",&a[i]);
           b[i]=a[i];
      }
      quk(0,n-1,a);
      mao(n,b);
      printf("%d %d\n",sum1,sum);
   }
   return 0;
}

你可能感兴趣的:(数据结构实验之排序二:交换排序)