接口技术实验五、排序实验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39071593/article/details/84027353

一、 实验目的
掌握用汇编语言编写查找和排序程序的思路和方法。
二、 实验原理
查找与排序是非数值程序设计中两个重要的技术问题。所谓查找,就是在大量的信息量中寻找一个特定的信息元素。具体地说,就是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素。关键字是数据元素或记录中某个数据项的值,用它可以标识一个数据元素或记录。排序是计算机程序设计中的另一种重要运算,它的功能是将一个数据元素的无序序列调整成为一个有序序列,以提高查找的效率。
三、 实验内容
排序(冒泡排序)
若有一个数组(或列)它有N个数,假设有如下的11个数:4、5、7、6、9、3、2、1、0、8。希望把它们按数的大小排列。我们采用两两比较的办法:先拿第N个数 与第N-1个数 相比较,若 ,则不交换,反之则交换;然后拿 与 相比较,按同样原则决定是否交换,这样一直比下去,最后拿 与 相比较,也按同样原则决定是否交换。则当第一趟比较结束时,数组中的最小值冒到了顶部。但数组尚未按大小顺序排列好,就要进行第二趟比较,这样数组中的第二个最小值升到了顶部的相应位置……。这样不断地一趟一趟比较下去,若数组的长度为N,则最多经过N-1趟比较,就可以使数组按大小排列有序。在每一趟比较时,两两比较的次数,在第一趟时为N-1次,在第二趟时,可以是N-2次……。N-1趟的比较是一种最坏情况,大部分数组不需要经过N-1趟的比较就已经排列有序了。为了在程序中除去不必要的比较,就可以设置一个标志,在每趟开始时,置此标志为0;若在整个趟的比较中,未发生数的交换,则此标志仍为0;若发生过交换,则置此标志为-1。然后在下一趟开始前,检查此标志,若不为0,表示数组尚未排列有序,继续进行比较排序;若为0,则表示数组已按大小排列有序(每次两两比较时,都已是大的数在下,小的数在上,故不用交换),就停止循环。一种比较简单的气泡排列程序的流程如下:

在这里插入图片描述
四、 实验报告
1.简述本次实验的内容。
2.画出编程流程图。
3.编写程序并注释。
4.写出自己在调试过程中遇到的难点及如何解决等心得体会。

点击这里先去理解什么冒泡排序法

DATAS SEGMENT
    DATA DB 4,5,7,6,9,3,2,1,0,8
    		;SI=4,SI+1=5,SI+2=7...
    LEN EQU $-DATA ;用来获得DATA的长度为10
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
	LEA SI,DATA 
	MOV CX,LEN ;便于等一下输出
	MOV DX,LEN 
	MOV BP,0
ORDER:
 A0:MOV SI,0
 	DEC DX ; 
  B:MOV AL,[SI]
	MOV BL,[SI+1]
	CMP AL,BL
	JB A1;小于或等于就不用交换
	XCHG AL,BL
	MOV [SI],AL
	MOV [SI+1],BL
 A1:INC SI
  	CMP SI,DX
  	JB B
  	INC BP
  	CMP BP,LEN
  	JB A0
  	MOV SI,0
OUTER:
	MOV AL,[SI]
	ADD AL,30H
	MOV AH,02H
	MOV DL,AL
	INT 21H
	MOV DL,' '
	INT 21H
	INC SI
	LOOP OUTER	   
DOS:MOV AH,4CH
    INT 21H
CODES ENDS
    END START

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39071593/article/details/84027353