2013-08-19 135 views
0

我想按降序排序列表,使用冒泡排序但我有两个问题。首先是下面的代码插入一个0作为第一个元素的原因我不明白(我想也许这是数组的错,但不存在,当这种排序不使用,所以我不不知道它从哪里来,第二个问题是这个实现按升序排序,我无法弄清楚如何修复它来做对立面,如果我能够找出零点,就可以做一个简单的交换,假设我有没有被伟大的MASM和不擅长的语言,我不很了解实施各种各样的双重问题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 

任何帮助感激。

+0

它似乎省略了最高值 –

+0

我想出了值问题,count值设置为1太高,所以它将数组之后的内存位置(在大多数情况下设置为0)作为排序的一部分。仍然可以使用帮助让它按降序排序 –

回答

1

第二个问题是此实现按升序排序,我无法弄清楚如何修复它来做对立面。

比较两个元素后反转分支条件。也就是说,不是jb $F,而是jae @F