• 締切済み

5×5マスにランダムに配置された数字をfopenで読み込み、行列と順にソートするには

9 20 1 19 5 21 4 8 18 10 23 2 16 3 11 7 22 13 6 12 24 25 14 17 15 というのをテキストファイルから読み込み、これをまず行でソートし、次に列でソートして、左上に小さい数が右下に大きい数がくるようにするにはどのように書いたらいいのでしょうか?ご教授お願いいたします

みんなの回答

回答No.3

ソートにこだわってるってことはファイルの読み込みはできてるんですよね。 あと、ソート自体も平気ですよね。 でソート自体は1行のデータを保存した状態にするのですか? 斜めもソートするのですか? 前者なら2次元配列で、それぞれの要素でソートすれば良いのでは? このとき行はmemcpyで1行まるごとコピーすればどうですか? このとき2次元配列に入れ間違えると縦、横がテレコになるのでご注意を。 後者なら全てのデータで小さい順に並べれば良いのだから、1次元配列で25個のデータをソートして、 出力で5×5で並べ直すだけだと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

われわれ回答者はあなたの置かれている状況をまったく知りません C/C++の機能の何を使っていいのか、何は使ってはいけないのかなど Cランタイムに用意されているソートを使っても良いのか、ソートルーチンも自作しろなのか また、ソートの手法に限定はあるのか ご自分で何処までコードが書けるのかを提示しましょう また期待する結果も投稿したほうがいいでしょう それによりプログラムの構造自体を変更しないといけない場合があります 行内ソート      1 5 9 19 20    4 8 10 18 21   2 3 11 16 23   6 7 12 13 22  14 15 17 24 25 列内ソート   1 3 9 13 20   2 5 10 16 21   4 7 11 18 22   6 8 12 19 23  14 15 17 24 25 といった結果なのでしょうか それとも1行目が1から5、2行目が6から10、といった具合に左上から右下に向かって昇順にソートするのでしょうか 最初から全てを作る事を考えずに1行のソートについて考えた見ましょう 5x5程度なら構造が単純な『交換ソート』を実装すればいいかと思います 1行のソートが出来れば 5x5配列から1列をを抜き出してソートするのはさほど困難ではないと思います 1) ソートさせるデータを1時的な配列にコピーしてソートを実行 2) 結果を見ながら元の配列を書き換える これでソート機能は完成ですから 入力部分、出力部分を作成すれば無事全体が完成します 入力に関しては fopen、fgets、fgetc、fscanf、fcloseなどだろうと思います

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

言語と数字の区切り方、改行コードはどうなっているのですか? ソートといわれるのは、最終的に5×5のままでソート??

taiga728
質問者

補足

ちょっと環境を書くのを忘れていたのですが、 環境はC言語でUNIXです。 数字はブランクで\nで改行かと思います。 ソートは最終的にできれば 1 2 3 4 5 6 7 ... という形にしたいのですが、できないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字数順にソートするには

    テキストファイルの行を文字数順にソートしたいのですが、 sort コマンドを使って行うことはできないのでしょうか? $ perl -e 'print for sort { length $a <=> length $b } <>' foo.txt でもいいのですが、行数が膨大なため、できるだけ早く処理したいと思っています。 もし何か方法がありましたら教えてください。お願いします。

  • 末数字でソート

    いつもお世話になっています。 Excelの1列に以下の数値が入っています。 10 111 30 117 7 1 1001 654327 これらを末尾の数値でソートしたいです ソート後 10 30 1 111 1001 117 654327 以上のようにしたいです。 どなたかご教授お願いします。

  • 数字を認識するsortコマンドはありますか?

    Windows XP/7のファイルマネージャーを見ていると、桁数に関係なく数字がソートされています。 (昔は桁数をそろえてゼロ詰めしていたものでしたが) これと同じことができるsortコマンドはないでしょうか? ファイル1 ファイル2  : ファイル10 ファイル11 というような内容のテキストファイルをソートして、数字順に出力してほしいのです。 現状では ファイル1 ファイル10 ファイル11 ファイル2  : となってしまいます。

  • エクセル2000で数字のソートについて

    以下は、エクセル2000でソートした結果です。 先頭はタイトル行で、各セルの[']は削除済みです。 ------- 図形ID 1410619 → (1) 1410620 → (2) 0010101 → (3) 0010102 → (4) 1550719 → (5) 1550720 → (6) ------- 期待した結果(右の番号で言えば3,4,1,2,5,6の順)とは異なります。 (1)と(2)のセルで、[F2]KEYを押してセル内で編集可能にしてから 何もせずに[Enter]を押し、再度ソートすると何故か期待通りの結果が 得られます。 数百行ある場合、いちいちセルごとに「[F2]を押して何もせずに[Enter]」 などやってられませんので、他に何かいい方法はないでしょうか? ※表示形式=文字列 です。先頭の"0"は必要です。

  • テキストフィルの行の文字数順にソートしたいのですが・・・

    テキストファイルの行単位での文字数が多い順や少ない順に ソートして並べ替えしたいのですが、その様なフリーソフトってないでしょうか? ベクターなども、見たのですが、Aからとかの昇り順と降り順しかないので・・・ もしかしたら見落としかもしれません・・・ -------------------------- honey shanshanmeimei loverzday artfree tfsq 上記の物を下記にしたいのです。 -------------------------- shanshanmeimei loverzday artfree honey tfsq -------------------------- この様に、文字数が多い順に並べ替えをしたいのです。 出来れば、少ない順も出来るソフトもあれば良いのですが・・・ よろしくお願いいたします。

  • エクセルのセル内の左上の三角形

    お世話になります。 数字と文字が混じっているのをソートしたいのですが,うまくできていません。 ソートするところを文字列に設定をしています。 セルを見ると,同じ1でも,セルの左上に黒い三角形があるのとないのがあるためにうまくソートができません。 その三角形は「数値をテキスト形式か,アポストロフィで始まっています」というコメントがでます。 この三角形をすべてに付けるか,なくす方法が分かればできそうです。ご教授お願いします。

  • csv元データーの数字の列が、""で囲まれているせいか、数値としてのソートできません

    次の式でソートしたいのですが、 @LINES = sort { (split(/\,/,$a))[0] <=> (split(/\,/,$b))[0] } @LINES; csv元データーの数字の列が、 "28000000","鈴木", のように""で囲まれているせいか、<=>で数値としてのソートできません。 cmpで文字列としてのソートは出来ます。 どうしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • エクセル:ランダムに配置するVBAプログラム

    大学の情報の授業でVBAに関するレポートが出題され、 さっぱり分からなくて困っています。 どなたか分かる方いらっしゃいましたら、お教えください。 問題は以下の通りです。 10行10列のセル範囲に、1から100までの整数をランダムに配置するVBAプログラムを作成せよ。 ヒント:まず1から100までの数を1次元配列に格納せよ。次に、その中身をシャッフルせよ。最後に、その配列から順に10個ずつ取り出して、セル範囲に1行ごと書き出せ。 よろしくお願いします!

  • Rubyで配列をソートする

    15(tab)5634(改行) 24(tab)4446(改行) 24(tab)8357(改行) 24(tab)3287(改行) 56(tab)5465(改行) 56(tab)1324(改行) 56(tab)7544(改行) 上記のように1行にtabで区切られた2つの数値が並んでいるテキストファイルがあります。 このファイルを、Rubyを使って1列目が同じ数字の行ごとにソートしたいのですが、できなくて困っています。 上の例でしたら、1列目が24の3行を2列目の数値をキーとしてソート、1列目が56の3行を2列目の数値をキーとしてソートするということです。 一行ずつ読み込んで、array = line.split(/\t/)でタブでくぎって配列に格納するスクリプトを書いていたのですが、どうしてもできないので、力を貸していただけないでしょうか。 よろしくお願いします。

  • エクセル、並び替え正しくソートしない。

    エクセルで並べ替えを行おうとすると、「並べ替えの前に」 次の並べ替えのキーにはテキスト形式の数値が含まれているため、 正しくソートできません、会員コード と出ます。 この会員コードは文字列で001~260行程有ります、最初250行 作成後数ヵ月後に追加した行がテキスト形式に成ったのだと思います、 これが正しい位置に並ばない原因のようですが、 どの様に修正するのか方法をご教授お願いします、 OS:XP エクセル2003 ちなみに001~+で260までドラックしても列を文字列に指定しても問題のセルは改善されない、