這一題還有更快的方法可以降低時間複雜度嗎? 第六筆一直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;
}
這一題還有更快的方法可以降低時間複雜度嗎? 第六筆一直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;
}
讀完之後再一次排序
怎麼排應該不難想 ^^