2011年8月18日 星期四

d075: 快速排序

內容 :
    快速排序.
    用O(n2)的會咻~碰

輸入說明 :
    只有一組測資
    就是把檔案中所有的數字排序
    請用EOF
    請將n 由大排到小.
    至多有 100001 個數字(我本來就想讓大家MLE...

輸出說明 :
    請將 排序好的數列 輸出
    記得要間隔
    不必換行.

範例輸入 :
1 4 3 5 2

範例輸出 :
5 4 3 2 1

程式碼 :
#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,j,n[100000];
    char nouse;
    
    i = 0;
    while(scanf("%d%c",&n[i++],&nouse)==2)
    {
        if(nouse == '\n')
        {
            qsort(n,0,i-1);
    
            for(j=0; j<i; j++)
                printf("%d ",n[j]);
            printf("\n");
            
            i = 0;
        }
    }
    return 0;
}



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

沒有留言:

張貼留言