我一直在研究插入排序的程序,但我似乎无法让它工作。谁能告诉我我做错了什么?只需忽略enterArray
程序,我现在只想弄清算法。
TITLE Insertion Sort (main.asm)
INCLUDE Irvine32.inc
.data
myArray SDWORD 12, 9, 15, 5
str1 byte "Enter the array: " ,0
str2 byte "The sorted array is: ",0
.code
main PROC
call Clrscr
;call enterArray
call InsertionSort
exit
main ENDP
enterArray PROC
;reads the array from the console
pushad
mov edi, OFFSET myArray
mov edx, OFFSET str1
call WriteString
call ReadInt
mov [edi], eax
add edi, 4
popad
ret
enterArray ENDP
InsertionSort PROC
pushad
mov ecx, SIZEOF myArray -1
mov eax, OFFSET myArray
outterloop:
mov edx,myArray[eax]
mov ebx,eax
beginwhile:
cmp ebx,0
JE endwhile
cmp myArray[ebx-4],edx
JNG endwhile
mov edx,myArray[ebx]
mov myArray[ebx-4],edx
sub edx,4
JMP beginwhile
endwhile:
add eax,4
LOOP outterloop
popad
ret
InsertionSort ENDP
END main
答案 0 :(得分:1)
mov edx,myArray[ebx]
mov myArray[ebx-4],edx
sub edx,4
您应该交换元素,而是覆盖myArray[ebx-4]
,而不是使用临时副本替换myArray[ebx]
。
此外,您的当前元素myArray[ebx]
,edx
的注册副本不应在以下行中更改。
sub edx,4
希望这两个错误可以让您的解决方案正常运行。我不知道为你重写整件事。我没有权限重新格式化你的帖子的代码,所以如果这有帮助,请点击我的向上箭头。