- ベストアンサー
成績表のSortについて
- C++プログラミング初心者のための成績表のSortについての課題
- SelectionSortとBubbleSortを使って成績表をソートする方法
- 初心者でも分かりやすいように成績表のソートアルゴリズムの説明
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
インデントをつけて、ちょっと内容がおかしい箇所を修正すると 次のようになると思います。 void SelectionSort(Str names[ ],int grades[ ],int count) { int i, j, largest, tmp; Str tmpName; for(i=0; i<count-1; i++) { largest=i; for(j=i+1; j<count; j++) if(grades[j]>grades[largest]) largest=j; // 番号iのデータを一時的に保持する tmp=gramdes[i]; strcpy(tmpName, names[i]); // 最大と判定された位置に番号iの位置にあるデータをコピーする grades[i]=grades[largest]; strcpy(names[i],names[largest]); // 一時的に保持したデータを先に最大と判定された位置にコピーする grades[largest]=tmp; strcpy(names[largest],tmpName); } } コメントをつけた箇所は、位置iと、最大と判定した位置(largest)のそれぞれの データを入れ替える処理になります。 2つの変数の内容を同じタイミングで処理するようになっているので混乱するのかも しれません。 それぞれ分けてみると、わかりやすいです。 tmp=gramdes[i]; grades[i]=grades[largest]; grades[largest]=tmp; 2つのデータを交換するような処理を入れるとき、計算机上ではデータを上書きする ことでメモリの内容を変更するので、上書きされるデータを一時的に退避する必要が あります。 こんなところになります。的外れであれば申し訳ありません。
お礼
さっそくお返事有難うございました。確かに分けて見ると分かりやすいですね。私のインストラクターはとにかくものすごい速さで授業を進め、おまけに英語なので時々「?」という感じになってしまいます。彼はテキストにそって授業をしないので、テストなどは授業中にとったノートが命という感じで、ノートをとるのに必死になってしまいますし。次のセメスターでもC++を取る予定です。日本語のC++の本も一冊くらい持っていたいと思うのですが、何か初心者でも理解しやすいお勧めの本を知っておられたら教えてください。