#3746: 更快的方法?


Piova (Piova)

學校 : 國立屏東大學
編號 : 11955
來源 : [114.36.4.10]
最後登入時間 :
2011-06-28 18:53:21
d550. 物件排序 | From: [163.24.253.73] | 發表日期 : 2010-05-19 15:30

這一題還有更快的方法可以降低時間複雜度嗎? 第六筆一直TLE壓...

#include <stdio.h>

 

struct array

{

    int num[200];

}list[10000];

 

int m;

 

int partition(int p, int r)

{

    int i=p-1, j, k;

    struct array t;

    for(j=p;j<r;j++)

    {

        for(k=0;k<m;k++)

            if((list[j].num[k]!=list[r].num[k]))

            {

                if(list[j].num[k]<list[r].num[k])

                {

                    t=list[++i];

                    list[i]=list[j];

                    list[j]=t;

                }

                break;

            }

    }

    t=list[r];

    list[r]=list[++i];

    list[i]=t;

    return i;

}

 

void quick_sort(int p, int r)

{

     if(p<r)

     {

         int q=partition(p, r);

         quick_sort(p, q-1);

         quick_sort(q+1, r);

     }

}

 

int main()

{

    int i, j, n;

    while(scanf("%d %d", &n, &m)!=EOF)

    {

        for(i=0;i<n;i++)

        {

            for(j=0;j<m;j++)

            {

                scanf("%d", &list[i].num[j]);

            }

        }

        quick_sort(0, n-1);

        for(i=0;i<n;i++)

        {

            for(j=0;j<m;j++)

            {

                printf("%d ", list[i].num[j]);

            }

            printf("\n");

        }

    }

    return 0;

}

 

 
#3747: Re:更快的方法?


linishan (L)

學校 : 國立交通大學
編號 : 1090
來源 : [104.132.150.102]
最後登入時間 :
2019-05-10 19:57:54
d550. 物件排序 | From: [125.228.104.224] | 發表日期 : 2010-05-19 18:42

這一題還有更快的方法可以降低時間複雜度嗎? 第六筆一直TLE壓...

#include

 

struct array

{

    int num[200];

}list[10000];

 

int m;

 

int partition(int p, int r)

{

    int i=p-1, j, k;

    struct array t;

    for(j=p;j

    {

        for(k=0;k

            if((list[j].num[k]!=list[r].num[k]))

            {

                if(list[j].num[k]

                {

                    t=list[++i];

                    list[i]=list[j];

                    list[j]=t;

                }

                break;

            }

    }

    t=list[r];

    list[r]=list[++i];

    list[i]=t;

    return i;

}

 

void quick_sort(int p, int r)

{

     if(p

     {

         int q=partition(p, r);

         quick_sort(p, q-1);

         quick_sort(q+1, r);

     }

}

 

int main()

{

    int i, j, n;

    while(scanf("%d %d", &n, &m)!=EOF)

    {

        for(i=0;i

        {

            for(j=0;j

            {

                scanf("%d", &list[i].num[j]);

            }

        }

        quick_sort(0, n-1);

        for(i=0;i

        {

            for(j=0;j

            {

                printf("%d ", list[i].num[j]);

            }

            printf("\n");

        }

    }

    return 0;

}

 

讀完之後再一次排序

怎麼排應該不難想 ^^  

 
ZeroJudge Forum