1,在外循环进内循环建立Flag标志,查看其是否交换过,若交换过flag变,若没flag不变.
2.小循环中每一次循环的次数减小将最后完成的位置,做为下一次循环的次数.
对下列程序进行以上两点改进.
datarea  segment
 a    dw       n dup(?)
datarea  ends 
prognam  segment
main     proc    far
    assume  cs:prognam,ds:datarea
start:
      
      push   ds
      sub    ax,ax
      push   ax
      mov    ax,datarea
      mov    ds,ax
      mov    cx,n
      dec    cx
loop1: mov    cx,n
       mov  bx,0
loop2: mov  ax,a[bx]
       cmp  ax,a[bx+2]
       jge   cotinue
       xchg  ax,a[bx+2]
       mov   a[bx],ax
cotinue: add     bx,2
         loop    loop2
         mov     cx,di
         loop    loop1
         ret
main     endp
prognam   ends
    end   start