彙編實現冒泡法排序及優化

2021-09-18 03:26:38 字數 1391 閱讀 6133

冒泡法排序:

氣泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素「浮」到頂端,最終達到完全有序。

但是這種冒泡法排序卻有很大的弊端

可以看見在第一次排序後雖然最大的數字被移動到了最右的位置,但是這輪排序對其他的數字並沒有造成有益的影響,甚至第二大的數字8還被向左移了一位,這樣的排序在資料量比較小的時候體現差異不大,但是如果資料量很大的情況下,資料交換的次數將會有很多,而且是不必要的,所以對傳統冒泡法進行了優化。

優化的冒泡法:

從第一位開始,第一位和第二位比較,若第一位比第二位大,則兩數交換,然後比較第二位和倒數第三位,以此類推。第一次迴圈結束後,這組數中最大的值被移到最右段,這樣第二次則不需要比較最後一位,只比較到倒數第二位即可,第三次比較到倒數第二位,以此類推。

彙編**實現:

例:用冒泡法使陣列按從小到大排序,並將排序結果存放到附加段中。

data segment 

x db 32,-43,76,95,-1,-78,127,-128,-125,88

data ends

extra segment

y db 10 dup (?)

extra ends

code segment

assume cs:code,ds:data,es:extra

start:mov ax,data

mov ds,ax

mov cx,9

mov di,-1

outside: mov si,offset x

add si,8

inside:mov al,[si]

mov bl,[si+1]

cmp al,bl

jle jump

xchg al,bl

jump: mov [si],al

mov [si+1],bl

dec si

push si

cmp si,di

jz channel

pop si

jmp inside

channel:pop si

inc di

loop outside

mov cx,10

get: mov bx,offset y

add bx,cx

dec bx

mov al,[bx]

mov es:[bx],al

loop get

mov ah,4h

int 21h

code ends

end start

氣泡排序法及簡單優化

鞏固自己學習,方便新手,把自己學習的寫出來,有錯誤的敬請指出。氣泡排序法我理解的三點 外迴圈 迴圈變數i,可以理解為對i位置排序。內迴圈 針對i位置,通過內迴圈,把大的數放在i位置。變數change 如果內迴圈不把change置為1說明排序已經結束。具體 如下 有注釋 include int mai...

Java 實現氣泡排序及優化

氣泡排序就是按索引逐次比較相鄰的兩個元素,滿足比較條件,則置換,否則不做改變。其優化手段可以從減少記憶體迴圈和外層迴圈著手。最差的冒泡 public void sort1 int ary system.out.println total time system.nanotime starttime ...

氣泡排序 python實現及優化

氣泡排序原理 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個 否則,位置不變。2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。最後的元素應該會是最大的數。3.針對所有的元素重複以上的步驟,除了最後乙個。4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...