nyoj8 一種排序

#include <stdio.h> 
#include <stdlib.h>
struct Node
{
	int num,l,w;
};
int cmp(const void *a,const void *b)
{
	Node *c=(Node *)a;
	Node *d=(Node *)b;
	if(c->num!=d->num)
		return c->num-d->num;
	else if(c->l!=d->l)
		return c->l-d->l;
	else return c->w-d->w;
}
int main()
{
	Node s[1010];
	int k,n,i;
	scanf("%d",&k);
	while(k--)
	{
		scanf("%d",&n);
		//int m=n;
		for(i=0;i<n;i++)
		{
			int t;
			scanf("%d%d%d",&s[i].num,&s[i].l,&s[i].w);
			if(s[i].l<s[i].w)
			{
				t=s[i].l;
				s[i].l=s[i].w;
				s[i].w=t;
			}
		}
		qsort(s,n,sizeof(s[0]),cmp);
		printf("%d %d %d\n",s[0].num,s[0].l,s[0].w);
		for(i=1;i<n;i++)
		{
			if(!(s[i].num==s[i-1].num&&s[i].l==s[i-1].l&&s[i].w==s[i-1].w))//不是刪除,只是選擇輸出
				printf("%d %d %d\n",s[i].num,s[i].l,s[i].w);
		}
	}
	return 0;
}

用了快速排序,這是這個題的解決方法要點
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章