氣泡排序法的幾種實現

2021-04-27 00:22:42 字數 1587 閱讀 4661

一、 彙編實現(基於51微控制器)

org 0000h

mov r1,#0ah  ;長度送r1

mov r0,#50h  ;a=50h

mov a,#0ah   ;a=0ah

init0:  mov @r0,a    ;將a內的值賦給r0指向的位址,(50h)= a

dec a       ;a的值自減1

inc r0      ;r0的值自加1,實現指標的向上偏移,r0=51h

djnz r1,init0    

pxcx:   mov r3,#50h  ;r3=50

ql4:    mov a,r3     ;指標送a=50h

mov r0,a     ;r0=50h

mov r7,#0ah  ;長度送r7=0ah

clr 00h      ;標誌位=0,用ooh位元組作標誌位

mov a,@r0    ;將r0指向位址的資料取出來,如第一次a=0ah

ql2:    inc r0      ;r0的值自加1,如第一次r0=51h

mov r2,a    ;r2=a

clr c       ;清除標誌位c

mov 22h,@r0  ;(22h)獲取r0指向位址的資料

cjne a,22h,ql3 ;相等嗎?比較兩個資料的值的大小

setb c         ;執行到這,說明兩個數值相等

ql3:    mov a,r2     ;a=r2

jc ql1       ;大於交換位置, cjne 這個操作會引起c的置位,a<(22h)則

;c=1,兩數已滿足排序要求,跳到下一迴圈即可

setb 00h     ;由於a>(22h),說明還有需交換的資料,置標誌位

xch a,@r0    ;進行交換,其中@r0=(22h)

dec r0      ;暫存器指向前一資料

xch a,@r0    ;交換位置

inc r0       ;暫存器指向下一資料

ql1:    mov a,@r0    ;a獲取r0指向位址的資料,準備第二次迴圈比較

djnz r7,ql2  ;r7計數器如果不為零,則繼續迴圈比較

jb 00h,ql4   ;當本次迴圈中有交換時,需要再進行一次迴圈比較

sjmp $       ;如果沒有交換發生則退出

end

二、c++語言實現

(1)方法1:

/*數值交換*/

template

void exch(item &a, item &b)

/*數值比較交換*/

template

void compexch(item &a, item &b)}}

(2)方法2:

/*數值比較交換*/

template

void compexch_ex(item &a, item &b, bool flag)

}/*冒泡發排序*/

template

void bubble_ex(item a, int l, int r)

if(false == flag)}}

C C 實現冒泡法排序

file gm bsort.h brief 氣泡排序 author don hao date 2011 8 23 19 55 56 version email hao.limin gmail.com company modification write modifications here.ifnd...

氣泡排序法,cpp實現

首先,從頭開始往後掃瞄整個序列,在掃瞄過程中逐次比較相鄰兩個元素的大小.若相鄰兩個元素中,前面的元素大於後面的元素,則將它們互換,最後整個序列中最大者換到了最後的位置.然後將最大乙個元素除外,用相同的辦法掃瞄其他資料直到整個序列有順序為止.include define len 9 using nam...

冒泡法排序C 實現

看一下 include using namespace std function count the number of count variable void printf int a,int count cout endl void bubblesort int a,int count cout...