- 締切済み
Fortran77で多次元配列を並び替え(ソート)する方法
Fortran77のプログラミングを勉強しています。 多次元配列の並び替えをする時に、各行の組み合わせを変えずにある列に含まれる要素についてソートを行いたいのですが、やり方が分かりません。どなたか方法を教えてくださいますでしょうか。 例えば、 (1,1)A,(1,2)あ,(1,3)3 (2,1)B,(2,2)い,(2,3)1 (3,1)C,(3,2)う,(3,3)2 という3×3の配列を読み込み、3列目を昇順に並べ替えて、 (1,1)B,(1,2)い,(1,3)1 (2,1)C,(2,2)う,(2,3)2 (3,1)A,(3,2)あ,(3,3)3 とした上で、別のファイルに出力したいのです。 初歩的な質問で恐縮ですが、どなたかご教授よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
えっと, 1000行×50列のデータがあって, 「ある列」によってソートしたいとします. その特定の列では, 当然データを移動させることになりますが, それにひきづられる形で他の列もデータを動かさなければなりません. 従って, 列が 1個の場合と 2個の場合では後者の方がプログラムが (わずかに) 長くなりますが, 10個くらいになると do ループで書くでしょうから長さは変わらなくなります. あ, Fortran だと「配列全体のコピー」ができるんでしたっけ. だとしたら, 列がいくつあっても長さは変わらないですねぇ, 多分.
- Tacosan
- ベストアンサー率23% (3656/15482)
つまり, 「1次元配列ならソートできる」んです... よね? だったら, 「データを移動する」ときに「必要なデータも一緒に動かす」だけ.
補足
ご回答ありがとうございます。 浅学ゆえ飲み込みが悪く恐縮ですが、ある列をソートしたい場合、列の数が多くなるほどプログラムの量も多くなるという理解でよろしいのでしょうか? 例えば1000行×50列の表を扱う時は、49の要素をそれぞれ同じように動かしていかねばならないのでしょうか。 それとも、ソートしたい列以外の部分はひとまとめにしてしまってソートするのでしょうか。 お手数煩わせますが、よろしくお願いします。
お礼
ありがとうございました。頑張ってみます。