帐号 密码  
 
多路树查找-外部查找(B树)【源代码】

多路树查找-外部查找(B树)【下载及演示说明】

双向链表演示程序【下载及演示说明】

循环链表演示程序【下载及演示说明】

链表【讲解】

动态存储分配之边界标识法演示程序【下载及演示说明】

动态存储分配之边界标识法【讲解】

首次适应算法和最佳适应算法【讲解】

动态存储分配之边界标识法【源代码】

振荡排序算法【讲解】

振荡排序演示程序【下载及演示说明】

树和二叉树相互转化【讲解】

深度优先搜索【下载及演示说明】

深度优先搜索【源代码】

朴素字符串匹配演示程序【下载及演示说明】

当前1/4页
首页 上一页 下一页 尾页

算法讲堂

    本栏目所有文章由本站组织业内技术专家原创而成,用汇编语言向学习者讲解经典问题的编程思想和编程方法。

    本栏目所有文章的版权归本站所有,转载请注明出处为汇编网<www.asmedu.net> 。

    现本栏目的内容处于不断添加中,请随时关注。
算法讲堂-》振荡排序算法【源代码】
    ;振荡排序

assume cs:code
;初始递增路段(递增字符串)为4个
str1 segment
        db 'ai$'
str1 ends
str2 segment
        db 'bjtvz$'
str2 ends
str3 segment
        db 'lmoqr$'
str3 ends
str4 segment
        db 'klo$'
str4 ends
;假设有三条磁带供利用,三条磁带,即外存储介质
T1 segment
        db 30 dup(0)
T1 ends
T2 segment
        db 30 dup(0)
T2 ends
T3 segment
        db 30 dup(0)
T3 ends
;三个磁带的游标
cur segment
        db 0 , 0 , 0
cur ends
;控制路段分布到哪个磁带
tape segment
        db 1 dup(0)        
tape ends
        
code segment
start:
    mov ax , str1
    mov ds , ax
    call distribute  ;分布
    mov ax , str2
    mov ds , ax
    call distribute  ;分布
    call merge       ;合并
    
    mov ax , str3
    mov ds , ax
    call distribute
    mov ax , str4
    mov ds , ax
    call distribute
    call merge
    
    ;合并最后两个磁带
    mov ax , tape    
    mov ds , ax
    mov byte ptr ds:[0] , 0   ;合并存放在数据的磁带1
    mov ax , cur
    mov ds , ax
    mov byte ptr ds:[1] , 0
    mov byte ptr ds:[2] , 0
    call merge
    
        mov ax , 4c00H
        int 21h
        
        
;================================================
;向磁带分布路段,ds路段段地址
distribute:
    push es
        push ax
        push bx
        push cx
        push di
        
        push ds
        mov ax , tape
        mov ds , ax
        cmp byte ptr ds:[0] , 0
        je toT1
        cmp byte ptr ds:[0] , 1
        je toT2
        cmp byte ptr ds:[0] , 2
        je toT3
        pop ds
        jmp disRet
toT1:
    pop ds
    mov si , 0       ;路段的位置控制量
    mov ax , cur
    mov es , ax
    mov ah , 0
    mov al , es:[0]
    mov di , ax      ;磁带的位置
    mov ax , T1
    mov es , ax 
T1Next:    
    mov al , ds:[si]
    cmp al , '$'
    je T1Ret
    mov es:[di] , al
    add si , 1
    add di , 1
    jmp T1Next 
T1Ret:
    mov ax , tape 
    mov ds , ax
    mov byte ptr ds:[0] , 1
    jmp disRet         
toT2:
        pop ds
    mov si , 0       ;路段的位置控制
    mov ax , cur
    mov es , ax
    mov ah , 0
    mov al , es:[1]
    mov di , ax      ;磁带的位置
    mov ax , T2
    mov es , ax 
T2Next:    
    mov al , ds:[si]
    cmp al , '$'
    je T2Ret
    mov es:[di] , al
    add si , 1
    add di , 1
    jmp T2Next 
T2Ret:
    mov ax , tape 
    mov ds , ax
    mov byte ptr ds:[0] , 2
    jmp disRet 
                 
toT3:
        pop ds
    mov si , 0       ;路段的位置控制
    mov ax , cur
    mov es , ax
    mov ah , 0
    mov al , es:[2]
    mov di , ax      ;磁带的位置
    mov ax , T3
    mov es , ax 
T3Next:    
    mov al , ds:[si]
    cmp al , '$'
    je T3Ret
    mov es:[di] , al
    add si , 1
    add di , 1
    jmp T3Next 
T3Ret:
    mov ax , tape 
    mov ds , ax
    mov byte ptr ds:[0] , 0
    jmp disRet          
disRet:        
    pop es
        pop di
        pop cx
        pop bx
        pop ax 

ret

;====================================================
;将两个磁带中的路段合并到第三条上
merge:
   push ds
   push es
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   
   mov ax , tape
   mov ds , ax
   cmp byte ptr ds:[0] , 0
   je mergeT23
   cmp byte ptr ds:[0] , 1
   jne goM1
   jmp mergeT13
goM1:   
   cmp byte ptr ds:[0] , 2   
   jne goM2
   jmp mergeT12
goM2:   
   jmp merRet
mergeT23:
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[1]  
    mov di , bx       ;T2的游标值
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[2]  
    mov si , bx      ;T3的游标
T2next1:    
    mov bx , T2
    mov ds , bx
    mov ah , ds:[di]
T3next1:    
    mov bx , T3
    mov ds , bx
    mov al , ds:[si] 
    
    cmp ax , 0       ;看是不是ah,al都为空
    jne goM3 
    jmp merRet
goM3:    
    cmp ah , 0
    je T3toT1
    cmp al , 0
    je T2toT1 
    cmp ah , al
    jna T2toT1         ;ah大就吧ah放到T1中
T3toT1:    
    push di
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[0]
    mov di , bx       ;T1的游标位置
    mov bx , T1
    mov ds , bx
    mov ds:[di] , al  ;把al放到T1中
    mov bx , cur
    mov ds , bx
    add byte ptr ds:[0] , 1    ;T1的游标位置加1 
    pop di 
    mov bx , T3
    mov ds , bx
    mov byte ptr ds:[si] , 0   ;将T3si位置上的数据清空
    add si , 1   ;T3的游标移动一位
    jmp T3next1
T2toT1:    
    push di
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[0]
    mov di , bx       ;T1的游标位置
    mov bx , T1
    mov ds , bx
    mov ds:[di] , ah  ;把ah放到T1中
    mov bx , cur
    mov ds , bx
    add byte ptr ds:[0] , 1    ;T1的游标位置加1 
    pop di 
    mov bx , T2
    mov ds , bx
    mov byte ptr ds:[di] , 0   ;将T2di位置上的数据清空
    add di , 1   ;T2的游标移动一位
    jmp T2next1
    
mergeT13:
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[0]  
    mov di , bx       ;T1的游标值
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[2]  
    mov si , bx      ;T3的游标
T1next2:    
    mov bx , T1
    mov ds , bx
    mov ah , ds:[di]
T3next2:    
    mov bx , T3
    mov ds , bx
    mov al , ds:[si] 
    
    cmp ax , 0       ;看是不是ah,al都为空   
    jne goM4
    jmp merRet
goM4:    
    cmp ah , 0
    je T3toT2
    cmp al , 0
    je T1toT2 
    cmp ah , al
    jna T1toT2         ;ah大就吧ah放到T1中
T3toT2:    
    push di
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[1]
    mov di , bx       ;T2的游标位置
    mov bx , T2
    mov ds , bx
    mov ds:[di] , al  ;把al放到T2中
    mov bx , cur
    mov ds , bx
    add byte ptr ds:[1] , 1    ;T2的游标位置加1 
    pop di 
    mov bx , T3
    mov ds , bx
    mov byte ptr ds:[si] , 0   ;将T3si位置上的数据清空
    add si , 1   ;T3的游标移动一位
    jmp T3next2
T1toT2:    
    push di
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[1]
    mov di , bx       ;T2的游标位置
    mov bx , T2
    mov ds , bx
    mov ds:[di] , ah  ;把ah放到T2中
    mov bx , cur
    mov ds , bx
    add byte ptr ds:[1] , 1    ;T2的游标位置加1 
    pop di 
    mov bx , T1
    mov ds , bx
    mov byte ptr ds:[di] , 0   ;将T1di位置上的数据清空
    add di , 1   ;T2的游标移动一位
    jmp T1next2
    
mergeT12: 
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[0]  
    mov di , bx       ;T1的游标值
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[1]  
    mov si , bx      ;T2的游标
T1next3:    
    mov bx , T1
    mov ds , bx
    mov ah , ds:[di]
T2next3:    
    mov bx , T2
    mov ds , bx
    mov al , ds:[si] 
    
    cmp ax , 0       ;看是不是ah,al都为空
    je merRet
    cmp ah , 0
    je T2toT3
    cmp al , 0
    je T1toT3 
    cmp ah , al
    jna T1toT3         ;ah大就吧ah放到T1中
T2toT3:    
    push di
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[2]
    mov di , bx       ;T3的游标位置
    mov bx , T3
    mov ds , bx
    mov ds:[di] , al  ;把al放到T3中
    mov bx , cur
    mov ds , bx
    add byte ptr ds:[2] , 1    ;T3的游标位置加1 
    pop di 
    mov bx , T2
    mov ds , bx
    mov byte ptr ds:[si] , 0   ;将T2si位置上的数据清空
    add si , 1   ;T2的游标移动一位
    jmp T2next3
T1toT3:    
    push di
    mov bx , cur
    mov ds , bx
    mov bh , 0
    mov bl , ds:[2]
    mov di , bx       ;T3的游标位置
    mov bx , T3
    mov ds , bx
    mov ds:[di] , ah  ;把ah放到T3中
    mov bx , cur
    mov ds , bx
    add byte ptr ds:[2] , 1    ;T3的游标位置加1 
    pop di 
    mov bx , T1
    mov ds , bx
    mov byte ptr ds:[di] , 0   ;将T1di位置上的数据清空
    add di , 1   ;T2的游标移动一位
    jmp T1next3 
merRet:   
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
   pop es
   pop ds
        
ret

code ends
  end start

[07/10/11]

Copyright C 2006-2024 ASMEDU.NET All Rights Reserved
Email: asmedu@163.com