2013-08-19 185 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