Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用快排序怎么超时了呢?用的是严薇敏那本数据结构上写的快排算法输入输出应该没问题,不知道快排算法坏在哪里? //b1002.c //printf("%.xd",y)就会输出y,宽度为x,不足则补零 #include <stdio.h> void input(long *number,long k){ char ch; int i; long a,b,sum; b=1000000; sum=0; for(i=0;i<7;i++){ while((ch=getchar())=='-'); if(ch<58) a=(ch-48); else if(ch<=80) a=(ch-59)/3; else a=(ch-60)/3; sum=sum+b*a; b/=10; } number[k]=sum; while((ch=getchar())!='\n'); } void make_x_mid(long *b,long x,long y,long z){ //使b[x]取b[x],b[y],b[z]居中的值 long mid ,temp; if(b[y]<=b[x]&&b[x]<=b[z]) return; if(b[z]<=b[x]&&b[x]<=b[y]) return; if(b[x]>b[y]){ if(b[y]>=b[z]) mid =y; else mid=z; } else{ if(b[y]>=b[z]) mid =z; else mid=y; } temp=b[x]; b[x]=b[mid]; b[mid]=temp; } void sort(long *number,long begin,long end){ long low,high; long pivotkey; if(begin==end) return; low=begin; high=end; make_x_mid(number,low,(low+high)/2,high); pivotkey=number[low];//枢轴值 while(low<high){ while(low<high && number[high]>=pivotkey) high--; number[low]=number[high]; while(low<high && number[low]<=pivotkey) low++; number[high]=number[low]; } number[low]=pivotkey; if(begin<low-1) sort(number,begin,low-1); if(low+1<end) sort(number,low+1,end); } void output(long *number,long n){ long i; long time=0; long a=number[0]; int tag=0; for(i=0;i<n;i++) if(number[i]==a) time++; else{ if(time>1){ printf("%.3ld-%.4ld %ld\n",a/10000,a%10000,time); tag=1; } a=number[i]; time=1; } if(time>1){ printf("%.3ld-%.4ld %ld\n",a/10000,a%10000,time); tag=1; } if(tag==0) printf("No duplicates.\n"); } int main(){ long n; long i; long number[100000]; scanf("%ld",&n); getchar(); for(i=0;i<n;i++) input(number,i); sort(number,0,n-1); output(number,n); } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator