作者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
→ seedpk5079:下面那一大坨印出是要檢查是否有進行排序 03/27 21:05
推 s864372002:這種東西用Qsort不會比較快喔...... 03/27 23:27
→ seedpk5079:能解釋一下嗎? 我只有碰過氣泡而已QQ 03/27 23:50
→ seedpk5079:先謝謝你的幫忙XD 03/27 23:51