冒泡法排序:
氣泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素「浮」到頂端,最終達到完全有序。
但是這種冒泡法排序卻有很大的弊端
可以看見在第一次排序後雖然最大的數字被移動到了最右的位置,但是這輪排序對其他的數字並沒有造成有益的影響,甚至第二大的數字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.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...