总结:
当函数指针作为函数的参数时,要注意函数原型需要相同,否则会发生未知的错误。
尽量使用标准库函数。
当需要排序时,能先分类就先分类。能大大减少所使用的资源

德才论问题
德才论问题
德才论问题

#include<stdio.h>
#include<stdlib.h>
unsigned int H, L;
typedef struct Info
{
	unsigned int Number;
	unsigned int de;
	unsigned int cai;
}tInfo;

int compare(const void * p, const void * q)
{
	tInfo *x = p, *y = q;
	if ((x->cai + x->de) != (y->cai + y->de))
	{
		if ((x->cai + x->de) > (y->cai + y->de))
			return -1;
	}
	else if (x->de != y->de)
	{
		if (x->de > y->de)
		{
			return -1;
		}
	}
	else
	{
		if (x->Number < y->Number)
			return -1;
	}
	return 1;
}
int main(void)
{
	int N=0, M=0,i=0,M1=0,M2=0,M3=0,M4=0;
	tInfo  Val1[10000], Val2[10000], Val3[10000], Val4[10000], temp;

	//read
	scanf("%d%d%d", &N, &L, &H);
	for (i = 0; i < N; i++)
	{
		scanf("%d%d%d", &temp.Number, &temp.de, &temp.cai);
		if (temp.de >= L && temp.cai >= L)
		{
			M++;
			if (temp.de >= H && temp.cai >= H)
			{
				M1++;
				Val1[M1 - 1] = temp;
			}
			else if (temp.de >= H)
			{
				M2++;
				Val2[M2 - 1] = temp;
			}
			else if (temp.cai <= temp.de)
			{
				M3++;
				Val3[M3 - 1] = temp;
			}
			else
			{
				M4++;
				Val4[M4 - 1] = temp;
			}
		}

	}

	printf("%d\n", M);

	qsort(Val1, M1, sizeof(tInfo),compare);
		
	for (i = 0; i < M1; i++)
	{
		printf("%d %d %d\n",Val1[i].Number, Val1[i].de, Val1[i].cai);
	}

	qsort(Val2, M2, sizeof(tInfo), compare);
	for (i = 0; i < M2; i++)
	{
		printf("%d %d %d\n", Val2[i].Number, Val2[i].de, Val2[i].cai);
	}
	qsort(Val3, M3, sizeof(tInfo), compare);
	for (i = 0; i < M3; i++)
	{
		printf("%d %d %d\n", Val3[i].Number, Val3[i].de, Val3[i].cai);
	}
	qsort(Val4, M4, sizeof(tInfo), compare);
	for (i = 0; i < M4; i++)
	{
		printf("%d %d %d\n", Val4[i].Number, Val4[i].de, Val4[i].cai);
	}
}

相关文章: