回答受付が終了しました
c言語に関する質問です。 下にあるプログラムに含まれる構造体をマージソートにより、身長を降順にして表示したいです。 自分が作成したコードだと画像のようにバグが発生します。
c言語に関する質問です。 下にあるプログラムに含まれる構造体をマージソートにより、身長を降順にして表示したいです。 自分が作成したコードだと画像のようにバグが発生します。 どこがおかしいか教えていただけるとありがたいです。 (自分が作成したコード) #include <stdio.h> #include <stdlib.h> typedef struct{ char name[20]; int height; double vision; } physCheck; void merge(physCheck x[], int left, int right) { if (left < right) { int center = (left + right) / 2; physCheck buf_a[500]; int na = center - left + 1; physCheck buf_b[500]; int nb = right - center; int p, i; merge(x, left, center); merge(x, center+1, right); for (p = 0, i = left; i <= center; p++, i++) { buf_a[p] = x[i]; } for (p = 0, i = center + 1; i <= right; p++, i++) { buf_b[p] = x[i]; } int pa=0; int pb=0; int pc=left; while(pa < na && pb < nb){ if(buf_a[pa].height >= buf_b[pb].height){ x[pc]=buf_a[pa]; pa++; pc++; }else{ x[pc]=buf_b[pb]; pb++; pc++; } } while(pa < na){ x[pc]=buf_a[pa]; pa++; pc++; } while(pb < nb){ x[pc]=buf_b[pb]; pb++; pc++; } } } int main(void) { physCheck x[]={ {"AKASAKA Tadao", 162, 0.3}, {"KATOH Tomiaki", 173, 0.7}, {"SAITOH Shouji", 175, 2.0}, {"TAKEDA Shinya", 171, 1.5}, {"NAGAHAMA Masaki", 168, 0.4}, {"HAMADA Tetsuaki", 174, 1.2}, {"MATSUTOMI Akiko", 169, 0.8}, }; int nx= sizeof(x) / sizeof(x[0]); puts("--------身体検査一覧表--------"); puts(" 氏名 身長 視力 "); puts("-----------------------------"); for(int i=0;i<nx; i++){ printf("%-18.18s%4d%5.1f\n", x[i].name, x[i].height, x[i].vision); } merge(x,0,nx);
コードの続きです puts("--------身体検査一覧表--(ソート後)----"); puts(" 氏名 身長 視力 "); puts("-----------------------------"); for(int i=0;i<nx; i++){ printf("%-18.18s%4d%5.1f\n", x[i].name, x[i].height, x[i].vision); } return 0; }
C言語関連・177閲覧