表の特定の行と行を入れ替えるswap_student関数と英語の点数を昇順に並べ替えるsort_english関数を用いて、
並べ替えたデータをmain関数内で表示したいのですが、どのようにコードを書いたら良いのかがわかりません。
元のデータは
Stuent data[] = {
{1,60},
{2,80},
{3,90},
{4,70},
{5,50},
で、そのデータを並び替えて
5 50
1 60
4 70
2 80
3 90
と出力したいです。
以下のコードだと考えていたのですが、正しい結果が出ないので教えていただきたいです。
よろしくお願いします。
c
1#include <stdio.h> 2 3typedef struct { 4 int id; 5 int english; 6}Student; 7 8void sort_english( Student data[ ] ); 9 10 11int main(void) { 12 13 Student data[] = { 14 {1,60}, 15 {2,80}, 16 {3,90}, 17 {4,70}, 18 {5,50}, 19 }; 20 21 sort_english(data); 22 23} 24 25void swap_student( Student *data1, Student *data2 ) { 26 int tmp; 27 tmp = data1; 28 data1 = data2; 29 data2 = tmp; 30} 31 32void sort_english( Student data[ ] ) { 33 int i,j; 34 for (i=0;i<=3;i++) { 35 for(j=i+1;j<=4;j++) { 36 if (data[i].english > data[j].english) { 37 Student swap1 = {data[i].english}; 38 Student swap2 = {data[j].english}; 39 swap_student(&swap1,&swap2); 40 } 41 } 42 } 43 44 printf("\n"); 45 for (i=0;i<=4;i++) { 46 printf(" %d ",data[i].id); 47 printf(" %d ",data[i].english); 48 printf("\n"); 49 } 50}
回答3件
あなたの回答
tips
プレビュー