作者在 2008-10-12 07:42:16 发布以下内容
;用汇编实现冒泡排序的函数
;参数说明:_lpData是待排序的数组首地址,_dwCount是待排序的个数,_dwOption设为0则由小到大排序
;如果是非0值,则是由大到小排序.
;返回值:已排序数据放回原数组中.
;参数说明:_lpData是待排序的数组首地址,_dwCount是待排序的个数,_dwOption设为0则由小到大排序
;如果是非0值,则是由大到小排序.
;返回值:已排序数据放回原数组中.
;作者:ONEPROBLEM
;=================================================
_BubblingSort proc _lpData,_dwCount,_dwOption
local @dwCount
pushad
mov edi,1
.while edi < _dwCount
mov esi,_lpData
mov eax,_dwCount
mov @dwCount,eax
sub @dwCount,edi
mov ebx,1
.while ebx <= @dwCount
mov eax,[esi]
.if eax<[esi+4] && _dwOption==0
jmp next
.elseif eax>[esi+4] && _dwOption==0
jmp continue
.elseif eax<[esi+4] && _dwOption!=0
jmp continue
.elseif eax>[esi+4] && _dwOption!=0
jmp next
.endif
continue:
mov eax,[esi]
mov edx,[esi+4]
mov [esi],edx
mov [esi+4],eax
next:
add esi,4
inc ebx
.endw
inc edi
.endw
popad
ret
_BubblingSort endp
;=================================================
;=================================================
_BubblingSort proc _lpData,_dwCount,_dwOption
local @dwCount
pushad
mov edi,1
.while edi < _dwCount
mov esi,_lpData
mov eax,_dwCount
mov @dwCount,eax
sub @dwCount,edi
mov ebx,1
.while ebx <= @dwCount
mov eax,[esi]
.if eax<[esi+4] && _dwOption==0
jmp next
.elseif eax>[esi+4] && _dwOption==0
jmp continue
.elseif eax<[esi+4] && _dwOption!=0
jmp continue
.elseif eax>[esi+4] && _dwOption!=0
jmp next
.endif
continue:
mov eax,[esi]
mov edx,[esi+4]
mov [esi],edx
mov [esi+4],eax
next:
add esi,4
inc ebx
.endw
inc edi
.endw
popad
ret
_BubblingSort endp
;=================================================