基本概念冒泡排序的基本概念是依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数,重复以上过程,仍从第一对数开始。可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数,将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,
data segment;定义数据段
org 2000
arr db 5,3,4,5,2,3,4,9,6
count equ $-arr
data ends
code segment;定义代码段
assume cs:code,ds:data
start:
;初始化待排序列
lea si,arr
mov dx,count
Foaming:
;不足两个元素,已有序
sub dx,1
jle endfoaming
xor bx,bx
mov cx,dx
Foaminglop:
;开始一趟排序
mov ax,[si][bx]
cmp ax,1[si][bx]
jle next
;逆序则交换
swap:
push ax
mov ax,1[si][bx]
mov [si][bx],ax
pop ax
mov 1[si][bx],ax
next:
;继续本趟排序
inc bx
loop Foaminglop
;开始下趟排序
jmp Foaming
endfoaming:
;结束排序
mov ax,4c00h
int 21h
code ends;结束程序
;===缓冲区定义例子===
BUF DB '256489713'
N EQU $-BUF
;===起泡排序代码例子===
lea si,BUF ;缓冲区地址
mov cx,N ;缓冲区中要排序的数值个数
sss_lp1:
dec cx
jz sss_out
push si
push cx
sss_lp2:
mov al,[si]
cmp al,[si+1]
jc sss_next
xchg al,[si+1]
mov [si],al
sss_next:
inc si
loop sss_lp2
pop cx
pop si
jmp sss_lp1
sss_out: ;完成退出处
声明: 我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本站部分文字与图片资源来自于网络,转载是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:daokedao3713@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
本站内容仅供参考,不作为诊断及医疗依据,如有医疗需求,请务必前往正规医院就诊
祝由网所有文章及资料均为作者提供或网友推荐收集整理而来,仅供爱好者学习和研究使用,版权归原作者所有。
如本站内容有侵犯您的合法权益,请和我们取得联系,我们将立即改正或删除。
Copyright © 2022-2023 祝由师网 版权所有
邮箱:daokedao3713@qq.com