作者scan33scan33 (亨利喵)
看板C_and_CPP
标题Re: [问题] define跟自订函式
时间Fri Mar 27 22:35:52 2009
※ 引述《seedpk5079 (fhcrc 99th ooxx)》之铭言:
: http://0rz.tw/Bqz0a
: 这是ZJ c010
: 他要我抓中间数
: 用气泡排序做过
: 可是TLE了... 所以我改用快速排序
用两颗heap吧! 每次花log n而已?
: 不过问题重点不是这个
: 重点在我用红色标起来的地方(没改不会动...)
: 如果将change函数改成下面的这个
: #define change(q,b){int c;c=q;q=b;b=c;}
你change要call by reference压!
: 我的快速排序法就能用了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: 219.71.193.65
1F:→ seedpk5079:什麽是call by reference0.0? 03/27 23:50
2F:→ seedpk5079:先谢谢你的帮忙XD 03/27 23:51
3F:推 stonehomelaa:change(int *a, int *b) 03/27 23:55