汇编实现冒泡法排序及优化

冒泡法排序:
冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。
在这里插入图片描述
但是这种冒泡法排序却有很大的弊端
可以看见在第一次排序后虽然最大的数字被移动到了最右的位置,但是这轮排序对其他的数字并没有造成有益的影响,甚至第二大的数字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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sdhdwyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值