1028 List Sorting

难得一次过的水题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct{
	int id;
	char name[10];
	int grade;
}record;



int cmp1(const void * a, const void * b){
	record ra = *(record *)a;
	record rb = *(record *)b;
	return (ra.id-rb.id);
}

int cmp2(const void * a, const void * b){
	record ra = *(record *)a;
	record rb = *(record *)b;
	if(strcmp(ra.name,rb.name) ==0){
		return (ra.id-rb.id);
	}
	return strcmp(ra.name,rb.name);
}

int cmp3(const void * a, const void * b){
	record ra = *(record *)a;
	record rb = *(record *)b;
	if(ra.grade == rb.grade){
		return (ra.id-rb.id);
	}
	return (ra.grade - rb.grade);
}

int main(){
	//freopen("in.txt","r",stdin);

	int n,c;
	scanf("%d %d",&n,&c);

	record * rs;
	rs = (record *)malloc(n*sizeof(record));

	for(int i = 0; i < n; i++){
		record r;
		scanf("%d %s %d",&r.id,&r.name,&r.grade);
		rs[i] = r;
	}

	switch(c){
		case 1:
		qsort(rs,n,sizeof(record),cmp1);
		break;
		case 2:
		qsort(rs,n,sizeof(record),cmp2);
		break;
		case 3:
		qsort(rs,n,sizeof(record),cmp3);
		break;

	}

	for(int i = 0; i < n; i++){
		record r = rs[i];
		printf("%06d %s %d\n",r.id,r.name,r.grade);
	}

	return 0;
}


你可能感兴趣的:(1028 List Sorting)