讨论 / 楼下说得对(L不是右边,只是一个变量)
zhuyebin 2017-09-14 13:51:26
点我顶贴 收藏 删除
#include<cstdio>

int a[110];

void dfs(int x,int y)

{

int l=x,r=y,m=a[(l+r)/2];

while(x<=y)

{

while(a[x]<m)x++;

while(a[y]>m)y--;

if(x<=y)

{

int t=a[x];a[x]=a[y];a[y]=t;

x++;y--;

}

}

if(x<r)dfs(x,r);

if(y>l)dfs(l,y);

}

int main()

{

int n;scanf("%d",&n);

int l=1,c=0,t=n;

while(t)

{

if(t-l>0){a[++c]=l;t-=l;l*=2;}

else if(t!=0)

{

if(t==1){a[c]++;t=0;}

else if(t%2==1){a[++c]=t;t=0;}

else if(t>a[c]){a[++c]=t;t=0;}

else {a[c]++;a[++c]=t-1;t=0;}

}

}

dfs(1,c);

printf("%d\n",c);

for(int i=1;i<=c;i++)

{

printf("%d ",a[i]);

}

}

#1 zhuyebin@2017-09-14 13:53:33
回复 删除
快排只在第二个点有用
查看更多回复
提交回复