2009-06-21 11:09:41來源不明

電腦-窮人的

作法:排序(10萬以上請用內建的排序)

/*********************************************************/

#include<stdio.h>  
#include<stdlib.h>   
int num[1000000]={0};
int compare( const void *a, const void*b )
{
 int *aa=(int*)a, *bb=(int*)b;
 if(*aa>*bb) return 1;
 if(*aa==*bb) return 0;
 if(*aa<*bb) return -1;
}
main()  
{  
 int a,b,n,m,max=0;  
 int temp,flag=0,top=0,num1=0;  
 scanf("%d",&n);  
       while(temp=getchar())     
        {     
          if(temp<=57&&temp>=48)     
           {num1=num1*10+temp-48;flag=1;}     
          else    
           {     
             if(flag==1)     
               {     
                 num[top]=num1;     
                 top++;     
                 num1=0;     
                 if(top==n) break;     
                 flag=0;     
               }     
           }      
      }    
   qsort(num,top,sizeof(int),compare);
   for(a=0;a<top;a++)
  printf("%d ",num[a]); 
 return 0;  
}  

Xatier 2009-06-25 15:14:14

這樣不就好了??
#include<stdio.h>
#include<stdlib.h>
int cmp(const void* a,const void* b){
return *(int*)a-*(int*)b;
}
int main(){
int array[1000000];
int N;
int i;
while(scanf(”%d”,&N)!=EOF){
for(i=0;i<N;i++){
scanf(”%d”,&array[i]);
}
qsort(array,N,sizeof(int),cmp);
for(i=0;i<N;i++){
printf(”%d ”,array[i]);
}
printf(”\n”);
}
return 0;
}

版主回應
這個叫做優化輸入
在大筆測資輸入時,速度可以提升2~3倍
參考文章:
http://blog.pchome.com.tw/news/iustlovefish/3/1313128292/20090621193336/
2009-06-25 17:37:21