匯編語(yǔ)言實(shí)現(xiàn)冒泡排序 如何使用匯編語(yǔ)言實(shí)現(xiàn)冒泡排序?
如何使用匯編語(yǔ)言實(shí)現(xiàn)冒泡排序?===緩沖區(qū)定義示例==buf DB“256489713”n eq$-buf==氣泡排序代碼示例===lea Si,buf buffer addressmov CX,要在
如何使用匯編語(yǔ)言實(shí)現(xiàn)冒泡排序?
===緩沖區(qū)定義示例==
buf DB“256489713”
n eq$-buf
==氣泡排序代碼示例===
lea Si,buf buffer address
mov CX,要在n個(gè)緩沖區(qū)中排序的值數(shù)
SSSulp1:
dec cx
jz SSSuout
push si
push cx
SSSulp2:
mov al,[si]
cmp al,[si 1]
jc SSSunext
xchg al,[si 1]
mov[si],al
SSSuNext:
inc si
loop SSSulp2
pop cx
pop si
jmp SSSu1
SSSuout:完成退出位置
依次比較兩個(gè)相鄰的數(shù)字,把小數(shù)放在前面,把大的數(shù)字放在后面。也就是說,在第一遍:首先,比較第一和第二個(gè)數(shù)字,把小數(shù)放在前面,把大的數(shù)字放在后面。然后比較數(shù)字2
和數(shù)字3,將小數(shù)點(diǎn)放在數(shù)字前面,將大數(shù)放在數(shù)字后面,依此類推,直到比較完最后兩個(gè)數(shù)字,將小數(shù)點(diǎn)放在數(shù)字前面,將大數(shù)放在數(shù)字后面。到目前為止,第一次通過已經(jīng)結(jié)束,最大的數(shù)字已經(jīng)結(jié)束。第二遍:從第一個(gè)對(duì)數(shù)開始比較
(由于第二個(gè)數(shù)和第三個(gè)數(shù)的交換,第一個(gè)數(shù)不再小于第二個(gè)數(shù)),將小數(shù)點(diǎn)放在前面,中間數(shù)和大數(shù),然后比較到倒數(shù)第二個(gè)數(shù)(倒數(shù)第二個(gè)數(shù)的位置是最大的),第二遍
最后,在倒數(shù)第二個(gè)位置得到一個(gè)新的最大數(shù)(實(shí)際上是整個(gè)序列中第二大的數(shù))。這樣,重復(fù)上述過程,直到完成最終排序。
第一次,將下標(biāo)0的個(gè)數(shù)與下面的n-1進(jìn)行比較;找出最小或最大的一個(gè),放在下標(biāo)0的位置;第二次,從下標(biāo)1的位置進(jìn)行比較;查詢剩余的最大或最小值;放在
下標(biāo)1的位置;依此類推;直到排序結(jié)束已完成