バブルソートで降順にデータを並び替えるプログラム作成方法を教えてください

このQ&Aのポイント
  • CASLを使用して、ラベルDATにランダムなデータが入っている場合、バブルソートを使用してデータを降順で並び替えるプログラムを作成する方法を教えてください。
  • バブルソートの手法を使用し、ラベルDATにランダムなデータが入っている場合、データを降順に並び替えるプログラムをCASLで作成する方法を教えてください。
  • CASLにおいて、ラベルDATにランダムなデータが入っている場合、バブルソートを用いてデータを降順に並び替えるプログラムを作成する手順を教えてください。
回答を見る
  • ベストアンサー

CASLについて質問です。

次の問題について教えてください。CASLの知識があまり無いのでできるだけやさしくしていただけると嬉しいです。 問題:ラベルDATから以下の様に、ランダムにデータが入っている。 これをバブルソートの手法を使い、降順にデータを並び替えるプログラムを作成せよ。 DAT  +0  5          DAT +0  9     +1  2               +1  8     +2  9               +2  7     +3  7               +3  6     +4  6               +4  5     +5  4      →        +5  4     +6  1               +6  3     +7  8               +7  2     +8  3               +8  1 以上です。よろしくおねがいします。

  • piya
  • お礼率50% (1/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

MAIN START LAD GR1,DAT ;ソート領域の先頭アドレス LD GR2,SIZE ;領域のサイズ CALL BUBBLEST RET SIZE DC 9 DAT DC 5 ;DAT[0] DC 2 ;DAT[1] DC 9 ;DAT[2] DC 7 ;DAT[3] DC 6 ;DAT[4] DC 4 ;DAT[5] DC 1 ;DAT[6] DC 8 ;DAT[7] DC 3 ;DAT[8] END ; ;指定された領域をバブルソートで降順に並び替える ;input: ;GR1:領域の先頭アドレス ;GR2:領域のサイズ ; ;GR0は破壊される ;バブルソートアルゴリズム ;for(i=先頭データアドレス; iが最後尾データアドレスでない; i=i+1){ ; for(j=最後尾データアドレス; jがiと等しくない ; j=j-1){ ; if(DAT[j-1] < DAT[j]){ //隣り合ったデータを比較して並び順が逆なら交換する ; (DAT[j-1],DAT[j])=(DAT[j],DAT[j-1]); ; } ; } ;} ; BUBBLEST START ST GR1,TOP ;先頭アドレスをTOPに取っておく ST GR2,SIZE ;領域サイズをSIZEに取っておく ADDL GR1,GR2 ;LAST=GR1=TOP+SIZE-1 SUBL GR1,=1 ST GR1,LAST ;最後尾アドレスをLASTに取っておく ; PUSH 0,GR3 ;GR3を外側ループ変数(i)として使う PUSH 0,GR4 ;GR4を内側ループ変数(j)として使う LD GR3,TOP ;i=先頭データアドレス OUTLOOP CPL GR3,LAST ;iと最後尾データアドレスを比較 JZE EXIT ;一致したらループ終了 LD GR4,LAST ;j=最後尾データアドレス INLOOP CPL GR4,GR3 ;jとiを比較 JZE OUTNEXT ;一致したら内側ループ終了、外側ループの次処理 LD GR0,-1,GR4 ;GR0=DAT[j-1] LD GR1,0,GR4 ;GR1=DAT[j] CPA GR0,GR1 ;DAT[j-1]とDAT[j]を比較 JMI SWAP ;DAT[j-1]<DAT[j]なら交換する JUMP INNEXT ;交換しない場合、内側ループの次の処理 SWAP ST GR0,0,GR4 ;DAT[j]←DAT[j-1] ST GR1,-1,GR4 ;DAT[j-1]←DAT[j-1] INNEXT SUBL GR4,=1 ;j=j-1 JUMP INLOOP ;内側ループ繰り返し OUTNEXT ADDL GR3,=1 ;i=i+1 JUMP OUTLOOP ;外側ループ繰り返し ;復旧 EXIT LD GR1,TOP LD GR2,SIZE ;GR2は、破壊されていないので必要ない POP GR4 POP GR3 RET TOP DS 1 LAST DS 1 SIZE DS 1 END

piya
質問者

お礼

丁寧に教えて下さり本当にありがとうございました。 無事に理解する事ができ大変感謝しております(*_ _)

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

CASLには、1と2がありますがCASL2ですか? わからないのは、バブルソートの手法ですか? バブルソートの手法の中でそれがCASLの命令語のどれに該当するかわからないということですか? 具体的にコードの全体を書くのは難しくはないですが、 せっかく回答を書いても、このような丸投げの質問の場合 (実プログラムの用途がないCASLに於いては特に) 削除されてしまうことが多いので、 具体的な部分の質問を心掛けてください。 例えば、こう書いたけれどもコレではうまくいかないなど

piya
質問者

補足

ご指摘ありがとうございます。 これはCASL2です。 バブルソートの手法の中でそれがCASLの命令語のどれに該当するかわからないということです。 なので具体的にまだコードが書けない状態です。 本も読んだのですが具体的には載っておらず、詳しく教えて頂ければ幸いです。

関連するQ&A

  • バブルソートの実行時間について

    バブルソートで降順、ランダム順に並んでいるデータを読み込ませて昇順に並び替える実行時間について質問です。 バブルソートにおける計算時間は、データ数が多いほど、並び替える回数が多いほど長くなるはずですが、実際に実行したところ、並び替える回数が多いはずの降順のほうがランダム順よりも早くなりました。 なぜこのようになるのですか? よろしくお願いします。

  • CASL2

    CASL2でどうしても分からない問題があります。 SLL命令で1桁ずつOFに出していくのですが、 プログラムの組み方をしっかり把握できていない為、 どうにもならない状態です。 分かる方がいらっしゃいましたら、 ヒントを頂きたいと思います。 よろしくお願いします。 ・課題1 DATA領域に格納されている1語の数値を、 2進数として画面に表示する プログラムを作成しなさい。 DATA領域の語は#1234とする。

  • ソートについて

    以下のデータを先頭の8,45で降順ソートにしたいのですが、どうすればよいのでしょうか? use strict; my @DAT=(); push @DAT, [8, 1, undef]; push @DAT, [45, 2, undef]; また、次の場合も降順ソートさせたいです。 push @DAT, {'ten'=>8, 'cd'=>1, 'memo'=>undef}; push @DAT, {'ten'=>45, 'cd'=>2, 'memo'=>undef};

    • ベストアンサー
    • Perl
  • ソートに関する質問です

    C言語でのプログラム作成の課題が解けなくて困っています。 バブルソートを使って、1000000個の整数データを昇順に並べ替えるプログラムを作成するというものです。 自分なりに作成したプログラムは、mallocでデータを格納する動的領域を確保して、後はシンプルにバブルソートの処理を行っています。 データ数が5,6万程度なら正常な動作が確認できるのですが、それより大量のデータ数だと、処理に時間が掛かりすぎるせいか、もしくは処理しきれずに動かなくなってしまったのか分かりませんが、プログラムの処理がいつまでたっても終わりません。 おそらくバブルソートの2重ループのあたりで、膨大な処理になってしまうのだと思うのですが、この問題についての改善策をどなたかご教授いただけませんでしょうか。

  • CASL1

    CASL1の問題でわからないものがありました。お手伝いいただけると助かります。問題に解説も載っていたので一緒に載せておきます。きっとそれほど難しくない問題なのでしょうが、CASLになれない為参考書を読んでもよく理解できません。。 10進入力と数字コード 入力 1~4個の10進数字の列。 出力 入力を正の10進数とみなしたときの2進表現。但し、有効数字のみを出力すること。 例:入力 2006[Enter] 出力 11111010110(メモリーの16ビット表現をそのまま出力した 0000011111010110は不可) 解説: (1)CASLの入出力はメモリー上の連続する領域(入出力バッファ)に文字データとして置かれた内容をINマクロ、OUT マクロでバッファの名前(先頭番地に付けたラベル)、バッファの長さを指定して行う。 (2)文字列を10進数として処理するためには、各文字が意味として0~9の数値をもつこと、各桁が10の冪乗の重みをもつことを理解する必要がある。前者では文字データから数値への変換(文字0~9に対するJIS の文字コードは連続しているので文字0に対するデータを引けば数値になる)し、後者では(それまでに処理した)上位桁の数値を10倍して次の新しい桁の数値を加えればよい。CASLには乗算の命令はないので2倍したもの(左1ビットシフト)と8倍(更に左2ビットシフト)したものとを加えればよい。 (3)数値を2進数字の列として求めるには1ビットずつ処理してシフトすればよい。例えば、1とAND を取ると最下位ビットが抽出される。

  • CASLについて質問です。

    次の問題について教えてください。CASLの知識があまり無いのでできるだけやさしくしていただけると嬉しいです。 問題:GR1にセットされた番地から始まり、GR2で示される語数からなる領域中の数値のMAX,MINを求める。数値は-32768~32767の範囲の値とし、各1語に格納されている。結果はGR2にMAXを GR3にMINを設定する。領域は1語以上あるものとする。 以上です。よろしくおねがいします。   

  • CASLの勉強で行き詰まりました

    現在、基本情報技術者用にCASLを勉強しています。2週間前から行っているのですが、なかなかプログラムが理解できません。 繰り返しの足し算までは理解し、書けるようになってると思うのですが、10進数を16進数文字列に変換するプログラムを作成しろ。という問題ではなんとなくは分かるのですが、具体的なプログラムにはできません。 今までプログラム作成の経験がないのですが、プログラム勉強の初期の段階ではみなさんどのように勉強なされていましたか? 今はなぜこのような動きをするのか、といった基本的な事も理解できていないのですが、どのように勉強していけばよいでしょうか? 勉強する時間は沢山あるので、それを含め回答頂けたら嬉しいです。 よろしくお願いします。

  • C言語の問題なのですが、分からないので教えて下さい

    以下のようなメニューを表示し,各項目の機能を実現して結果を表示するプログラムを作成せよ。 リストは1つとし,初期値は「15 4 32 1」である。 ・データの追加,削除を行う関数を作成する。 ・データの追加に関して,そのデータはリストの最後に挿入されるものとする。 ・データのソート(降順)を行う関数を作成する。 ・リストの平均値を計算し出力する関数を作成する。 ------表示例------- 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか: ------------------- ------実行例------- 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:1 追加するデータを入力してください:10 リスト: 15 4 32 1 10 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:4 リストの平均値:12.4 リスト: 15 4 32 1 10 1.データの追加 2.データの削除 3.データのソート(降順) 4.リストの平均値 5.終了 何を実行しますか:3 リスト: 32 15 10 4 1

  • アルゴリズムプログラミング

    アルゴリズムにおいて以下のような課題が出たのですかその実行結果を出すためのソースプログラム、または実行結果をどなたか教えてください! (1)バブルソート、選択ソート、挿入ソートプログラムに対して、実行時間(小数点以下2桁まで)、比較回数、代入回数をデータ数50000、100000、150000、200000の4つの場合でそれぞれ測定せよ。ただし対象データはランダム関数SFMTを利用して作成するものとする。 (2) ヒープソート、クイックソートとマージソートプログラムの実行時間(小数点以下2桁まで)、比較回数、代入回数をデータ数50000、100000、150000、200000の4つの場合でそれぞれ測定せよ。ただし対象データはランダム関数SFMTを利用して作成するものとする。 SFMTは以下のサイトからSFMT-srcー1.3.3.zipをダウンロードして解凍する。 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index-jp.html#SFMT そのうち必要なファイルは sfmt.h sfmt.c sfmt-params.h sfmt-params19937.h を使用する。 どうぞよろしくお願いします。

  • CASL2のアセンブリ(?)で質問です

    CASL2のアセンブリ(?)で質問です 期末試験範囲であるCASL2に入って、とりあえずこんな問題が出るといわれました 教科書をいろいろ見ていますがちょっとよくわかりません 実際に問題とその解答をみてみると流れがわかるかと思い質問しました (1)と(2)について答えとできれば解説をお願いしたいです。助けてください! (1)整数AをN乗してGR0に格納するプログラムを作れ  (オーバーフロウの時の対応等は必要なし) (2)以下のプログラムが行っていることを説明して、ループ中に生じるGR1の変化を書き連ねなさい 1 PROGRAMX START 2 LD GR0,C1 3 XOR GR1,GR1 ;GR1とGR1の排他的論理和 4 LD GR2,COUNT 5 LOOP LD GR3,GR1 6 LD GR1,GR0 7 ADDL GR0,GR3 ;GR0,GR3の論理加算 8 SUBL GR2,C1 ;GR2とCR1の論理減算 9 JNZ LOOP 10 RET 11 C1 DC 1 12 COUNT DC 2 13 END 3行目のXORは単にGR1を0にするために演算される。7,8行目はは算術演算ADDA,SUBAでも問題ないのだが、ここで扱う値が正の整数であるから効率のよいものを使った。