#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数据结构实验之排序二:交换排序
最新推荐文章于 2021-12-04 21:51:13 发布
本文通过两个不同的排序算法——冒泡排序和快速排序,演示了它们在相同数据集上的表现,并记录了各自的操作次数。通过对两种算法的实现进行分析,读者可以了解到冒泡排序和快速排序的基本原理及效率差异。
2506

被折叠的 条评论
为什么被折叠?



