【发布时间】:2020-08-07 15:16:29
【问题描述】:
我正在使用基本伪代码/大纲在汇编中实现冒泡排序:
for i in array
if array[i] >= array[i+1]
exchange array[i], array[i+1]
我的 ASM 代码:
BubbleSort PROC
mov EBX, LENGTHOF myArr
.REPEAT
mov ESI, 0
mov ECX, LENGTHOF myArr
.REPEAT
mov EAX, [myArr + ESI]
.IF EAX >= [myArr + ESI + TYPE myArr] ; If (myArr[i] < myArr[i + 1])
xchg EAX, [myArr + ESI + TYPE myArr]
mov [myArr + ESI], EAX
.ENDIF
add ESI, TYPE myArr
dec ECX
.UNTIL ECX == 0
dec EBX
.UNTIL EBX == 0
ret
BubbleSort ENDP
当我向我的教授展示我的实现时,他说它“有点”像冒泡排序或“某种”冒泡排序。在告诉我们分配任务时,他说我们应该从阵列的后面开始,然后从后向前移动。然而,我是从前面开始,从前到后移动。
我觉得我走在正确的轨道上,代码可以正常工作,但我想正确地做。
有人知道我在哪里搞砸了吗?
【问题讨论】:
-
他认为你应该从后到前有什么特别的原因吗?如果您查看 wikipedia 上的普通伪代码实现,它的内循环是从前到后的,而它的外循环继续进行,直到不再发生交换。
-
@Michael 我不太确定,如果我没记错的话,他说这会比从前到后更快。
标签: assembly x86 masm bubble-sort