- ベストアンサー
リスト再質問
前にリストについて質問した者です #include <stdio.h> #include <stdlib.h> typedef struct _node{ char name[100]; int koku; int suu; int eig; int gou; struct _node *next; }Node; int main(void) { Node *a[5]; Node *head; Node *crnt,*p,*t,dummy; int data, swap; int i; head=(Node*)malloc(sizeof (Node)); head=NULL; crnt=NULL; head=(Node*)malloc(sizeof (Node)); printf("名前:"); scanf("%s",head->name); printf("国語 数学 英語 : "); scanf("%d %d %d",&head->koku,&head->suu,&head->eig); head->gou=(head->koku+head->suu+head->eig); a[0]=head; a[0]->next=NULL; for(i=1;i<5;i++) { a[i]=(Node*)malloc(sizeof (Node)); printf("名前:"); scanf("%s",a[i]->name); printf("国語 数学 英語 : "); scanf("%d %d %d",&a[i]->koku,&a[i]->suu,&a[i]->eig); a[i]->gou=(a[i]->koku+a[i]->suu+a[i]->eig); a[i]->next=NULL; } printf("%s ",head->name); printf("%d %d %d %d\n",head->koku,head->suu,head->eig,head->gou); a[0]=head; a[0]=a[0]->next; for(i=1;i<5;i++) { printf("%s ",a[i]->name); printf("%d %d %d %d\n",a[i]->koku,a[i]->suu,a[i]->eig,a[i]->gou); a[i]=a[i]->next; } return 0; } とプログラム出来たのですが 今は入力した順に名前と点数、合計が表示するように なってます。しかしこれを合計の値で順位をつけ 一番合計点が高い人から 名前、点数、合計を表示したいのです。入力がすべて終了したらソートするようにしたいのですが わかりません どうすればいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1. 現ノード = 先頭ノード 2. 現ノードを含みそれ以降の各ノードの中から最高点を持つノードを探す 3. 現ノードと最高点ノードの内容を交換する 4. 現ノードを次に進め2,3を繰り返す。次がなければ終了。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
リストに入ってるデータをソートするんだったら普通はマージソート. まあ, その前に「リストとは何か」を理解する必要があると思いますが.