作者seedpk5079 (fhcrc 99th ooxx)
看板C_and_CPP
标题[问题] define跟自订函式
时间Fri Mar 27 20:56:55 2009
http://0rz.tw/Bqz0a
这是ZJ c010
他要我抓中间数
用气泡排序做过
可是TLE了... 所以我改用快速排序
不过问题重点不是这个
重点在我用红色标起来的地方(没改不会动...)
如果将change函数改成下面的这个
#define change(q,b){int c;c=q;q=b;b=c;}
我的快速排序法就能用了0.0(但是它变成会无条件的变换了耶... 变成我写的有问题=.=)
注:看来问题不少... 题目上的60测资我没过... 麻烦大家多多帮忙罗
还有个小问题
那个尚未弄懂(注解那里)有人能解吗?
#include<stdio.h>
int left,right,now[9999]={};
void change(int q,int b){
int c=q;
q=b;
b=c;
}
void quick_sort(int left,int right){
int i,j,key,w;
if(left<right){
key=now[left];
i=left+1;j=right;
printf("i=%d j=%d\n",i,j);
while(1){
if(i>=j){break;}
for(;now[i]<key&&i+1<=right;){/*i+1 j-1尚未弄懂*/
i++; }
for(;now[j]>key&&j-1>-1;){
j--; }
if(i<j){
change(now[i],now[j]);
}
}
if(left<j){
change(now[left],now[j]);
}
quick_sort(left,j-1);
quick_sort(j+1,right);
}
}
int main(){
int a,x=0;
while( scanf("%d",&a)!=EOF){
int l,i,j,h,k;
printf("x=%d\n",x);
now[x]=a;
printf("befoer%d %d %d %d %d %d\n",now[0],now[1],now[2],now[3],now[4],now[5]);
quick_sort(0,x);
printf("after%d %d %d %d %d %d\n",now[0],now[1],now[2],now[3],now[4],now[5]);
l=x/2;
if(x%2==1){/*偶数个数字*/
printf("()%d\n",(now[l]+now[l+1])/2);
}
else{
printf("()%d\n",now[l]);
}
x++;
}
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.60.161.254
1F:→ seedpk5079:下面那一大坨印出是要检查是否有进行排序 03/27 21:05
2F:推 s864372002:这种东西用Qsort不会比较快喔...... 03/27 23:27
3F:→ seedpk5079:能解释一下吗? 我只有碰过气泡而已QQ 03/27 23:50
4F:→ seedpk5079:先谢谢你的帮忙XD 03/27 23:51