- ベストアンサー
バブルソートで降順にデータを並び替えるプログラム作成方法を教えてください
- CASLを使用して、ラベルDATにランダムなデータが入っている場合、バブルソートを使用してデータを降順で並び替えるプログラムを作成する方法を教えてください。
- バブルソートの手法を使用し、ラベルDATにランダムなデータが入っている場合、データを降順に並び替えるプログラムをCASLで作成する方法を教えてください。
- CASLにおいて、ラベルDATにランダムなデータが入っている場合、バブルソートを用いてデータを降順に並び替えるプログラムを作成する手順を教えてください。
- みんなの回答 (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
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
CASLには、1と2がありますがCASL2ですか? わからないのは、バブルソートの手法ですか? バブルソートの手法の中でそれがCASLの命令語のどれに該当するかわからないということですか? 具体的にコードの全体を書くのは難しくはないですが、 せっかく回答を書いても、このような丸投げの質問の場合 (実プログラムの用途がないCASLに於いては特に) 削除されてしまうことが多いので、 具体的な部分の質問を心掛けてください。 例えば、こう書いたけれどもコレではうまくいかないなど
補足
ご指摘ありがとうございます。 これはCASL2です。 バブルソートの手法の中でそれがCASLの命令語のどれに該当するかわからないということです。 なので具体的にまだコードが書けない状態です。 本も読んだのですが具体的には載っておらず、詳しく教えて頂ければ幸いです。
お礼
丁寧に教えて下さり本当にありがとうございました。 無事に理解する事ができ大変感謝しております(*_ _)