2011年8月19日 星期五

a104: 排序

內容 :
    幫我排個數字謝謝QQ

輸入說明 :
    有多筆測資以EOF為結束
    第一行有一個正整數n(1<=n<=1000),代表有幾個數字要請你幫忙排
    第二行有n個可以用int儲存的正整數

輸出說明 :
    輸出n個已由小到大排序好的正整數

範例輸入 :
6
7 9 0 4 1 8
8
1 9 9 0 0 9 2 8

範例輸出 :
0 1 4 7 8 9
0 0 1 2 8 9 9 9

提示 :
    背景知識: 基礎排序

程式碼 :
#include<stdio.h>

void qsort(int n[], int left, int right)
{
    int i = left, j = right+1, temp;
    int ii = left-1, jj = j;
    if(left < right)
    {
        while(1)
        {
            while((i+1)<jj && n[++i]<n[left]);
            while((j-1)>ii && n[--j]>n[left]);
            if(i >= j)
                break;
            temp = n[i];
            n[i] = n[j];
            n[j] = temp;
        }
        
        temp = n[left];
        n[left] = n[j];
        n[j] = temp;
        
        qsort(n, left, j-1);
        qsort(n, j+1, right);
    }
}

int main()
{
    int i,n[1001],len;
    
    i = 0;
    while(scanf("%d",&len)==1)
    {
        for(i=0; i<len; i++)
            scanf("%d",&n[i]);
        qsort(n,0,len-1);
    
        for(i=0; i<len; i++)
            printf("%d ",n[i]);
        printf("\n");
            
    }
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=a104

沒有留言:

張貼留言