Boost総合スレ part7

このエントリーをはてなブックマークに追加
676 ◆/91kCCQXBo
>>113 ソートのアルゴリズムは習ってないということで。
#include <stdio.h>
#include <stdlib.h>
struct seiseki {
  char name[20];
  int order[6];
} seito[] =
  {{"太郎",80,90,75,70,70}, {"次郎",70,85,80,80,85}, {"三郎",75,95,65,90,95}, {"四郎",65,70,80,75,80},
   {"春子",90,100,85,90,85},{"夏子",100,95,80,85,80}, {"秋子",60,75,90,70,85}, {"冬子",85,80,85,90,95}};
int kamoku;
int cmp(const struct seiseki *a, const struct seiseki *b) {
  int t = a->order[kamoku] - b->order[kamoku];
  return (t==0)?0:(t>0?1:-1);
}
int main() {
  int i, array_size = sizeof(seito)/sizeof(*seito);
  char s_kamoku[6][10] = {"国語","算数","理科","社会","英語","合計"};
  for(i=0; i<array_size; i++) {
    seito[i].order[5] = seito[i].order[0] + seito[i].order[1] +
      seito[i].order[2] + seito[i].order[3] + seito[i].order[4];
    printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1],
      seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]);
  }
  for(kamoku=5; kamoku>=0; kamoku--) {
    printf("\n%sの点数で並び替え\n", s_kamoku[kamoku]);
    qsort(seito, array_size, sizeof(*seito), (int (*)(const void*, const void*))cmp );
    for(i=0; i<array_size; i++) {
      printf("%s,%3d,%3d,%3d,%3d,%3d,%4d\n", seito[i].name, seito[i].order[0], seito[i].order[1],
        seito[i].order[2], seito[i].order[3], seito[i].order[4], seito[i].order[5]);
    }
  } return 0;
}