0

バブルソートを使用してリストを降順にソートしようとしていますが、2 つの問題があります。1つ目は、次のコードが私が理解できない理由で最初の要素として0を挿入していることです(おそらく配列のせいだと思いましたが、このソートが使用されていない場合は存在しないため、 「どこから来ているのかわからない. 2番目の問題は、この実装が昇順でソートされることであり、逆のことを行うように修正する方法がわからない. ゼロを見つけることができれば、単純なスワップを行うことができます.私は、MASM が得意ではないことと、あまりよく理解できない言語での並べ替えの実装が得意ではないという二重の問題を抱えています。

コード:

メインからの呼び出し:

push count ; size of the array
push OFFSET list ; the array
call sortList

手順:

sortList Proc
push ebp
mov ebp, esp
mov ecx,[ebp+12]
mov edx,[ebp+8]
bs_o:
xor ebp,ebp
bs_i:
mov eax,DWORD PTR [edx+ebp*4+4]
cmp DWORD PTR [edx+ebp*4],eax
jb @F
xchg eax,DWORD PTR [edx+ebp*4]
mov DWORD PTR [edx+ebp*4+4],eax
@@:
add ebp,1
cmp ebp,ecx
jb bs_i
loop bs_o
pop ebp
retn 8

どんな助けでも大歓迎です。

4

1 に答える 1

1

2 つ目の問題は、この実装が昇順で並べ替えられていることです。逆の順序で並べ替える方法がわかりません。

2 つの要素を比較した後、分岐条件を反転します。つまり、 の代わりにjb $Fを実行しますjae @F

于 2013-08-19T05:45:00.943 に答える