ソート
typedef struct{
int num;
char name[20];
char type_of_class[8];
double average
} data;
data seiseki[100];
int main()
{
data[0].num = 1;
strcpy(data[0].name, "山田太郎");
strcpy(data[0].type_of_class, "A_class");
data[0].average = 66.2;
data[1].num = 2;
strcpy(data[1].name, "鈴木二郎");
strcpy(data[1].type_of_class, "B_class");
data[1].average = 43.1;
data[2].num = 3;
strcpy(data[2].name, "佐藤三郎");
strcpy(data[2].type_of_class, "A_class");
data[2].average = 39.1;
data[3].num = 4;
strcpy(data[3].name, "加藤四郎");
strcpy(data[3].type_of_class, "Bclass");
data[3].average = 93.6;
data[4].num = 5;
strcpy(data[4].name, "石田五郎");
strcpy(data[4].type_of_class, "B_class");
data[4].average = 57.9;
data[5].num = 6;
strcpy(data[5].name, "草田六郎");
strcpy(data[5].type_of_class, "A_class");
data[5].average = 6.2;
//ソート処理
}
このように各値が決まってる時
まず同じクラスのものをソートし
その中でaverage(平均点)の高い順に並べるソートを行いたいと思います。
最終的には
1,山田一郎,A,66.2
3,佐藤三郎,A,39,1
6,草田六郎,A,6.2
4,加藤四郎,B,93,6
5,石田五郎,B,57.9
2,鈴木二郎,B,43.1
のような感じになってると思います。ソートは行ごとです。
入れ替えの関数はint型のとdouble型のとchar型の3タイプ用意しています。
void intswap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
void double(double * p, double *q)
{
double temp;
temp = *p;
*p = *q;
*q = temp;
}
void wordswap(char p[], charq[])
{
char *temp = strdup(p);
strcpy(p, q);
strcpy(q, temp);
free(temp);
}
残りがわかりません。
教えて下さい。
お礼
たとえば、、 ningen ni[2] = ningen{(20,"sato"),(30,"goto")}; のようにningenを何度も書かないでやるような方法はないのかな? と思って質問させていただきました。