【8086アセンブリ】ベースソートのバブルソート


バブルソートは極めて基礎的なソートアルゴリズムであり、C言語、JAVAなどのプログラミング言語を学んだことがあると信じている学生はこれをよく知っている.
バブルソートの原理は配列中の前後の2つを2つずつ比較し、小さいのは前の大きいのは後(あなたも逆にすることができます)、1回のサイクルの後、最大の数は最後まで数えます.
次は最後の最大数を除いて、前の数に対して上記の操作を続けます.
最後の数まで操作を繰り返す
今日は8086アセンブリ言語で、このソートアルゴリズムを見てみましょう.
DATAS SEGMENT
    a dw 19,15,13,14,18,62,14,42,35,68
DATAS ENDS


STACKS SEGMENT
   	dw 10 dup(0)
STACKS ENDS


CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
	mov ax,DATAS
	mov ds,ax
	
	mov cx,10
	dec cx;    n-1
loop1:
	push cx
	mov bx,0
loop2:
	mov ax,a[bx]
	cmp ax,a[bx+2];    ,       ,       
	jle continue
	xchg ax,a[bx+2]
	mov a[bx],ax


continue:
	add bx,2;    ,   2       
	loop loop2
	pop cx
	loop loop1
	
	MOV AH,4CH
   	INT 21H
CODES ENDS
    END START

コードから明らかなように,バブルソートの操作複雑度はO(n^2)であり,これは小規模データの処理に比較的簡便であるが,大規模データの処理となると,対応する時間的コストが非常に高い.
一方、バブルソートは安定したソートアルゴリズムであり、不安定な選択ソート、高速ソートよりも、安定性に要求がある場合は、バブルソートを選択してもよい.