2010年7月16日 星期五

[C/C++] 排序數字(分2組處理)


//第一行為要排序的數字數目
//第二行為要排序的數字



#include
int A[10001],k[10001];
int f(int a,int b){
    if(a==b)return 0;
   
    f(a,(a+b)/2);
    f((a+b)/2+1,b);
    //A[a]~A[(a+b)/2]
    //A[(a+b)/2+1]~A[b]
    int i,j,K;
    i=a;
    j=(a+b)/2+1;
    K=a;
    while(i<=(a+b)/2&&j<=b){
        if(A[i]<=A[j]){
            k[K]=A[i];
            i++;
        } else {
            k[K]=A[j];
            j++;
        }
        K++;
    }
    while(i<=(a+b)/2){
        k[K]=A[i];
        i++;
        K++;
    }
    while(j<=b){
        k[K]=A[j];
        j++;
        K++;
    }
    for(i=a;i<=b;i++){
        A[i]=k[i];
    }
}
main(){
    int i,j,k,n;
    int tmp;
    while(scanf("%d",&n)==1){
        for(i=0;i
            scanf("%d",&A[i]);
        }
        f(0,n-1);
        for(i=0;i
            printf("%d ",A[i]);
        }
        puts("");
    }
    scanf("  ");
}

沒有留言:

張貼留言