1. 程式人生 > >介面技術實驗五、排序實驗

介面技術實驗五、排序實驗

一、 實驗目的
掌握用匯編語言編寫查詢和排序程式的思路和方法。
二、 實驗原理
查詢與排序是非數值程式設計中兩個重要的技術問題。所謂查詢,就是在大量的資訊量中尋找一個特定的資訊元素。具體地說,就是根據給定的某個值,在表中確定一個關鍵字等於給定值的記錄或資料元素。關鍵字是資料元素或記錄中某個資料項的值,用它可以標識一個數據元素或記錄。排序是計算機程式設計中的另一種重要運算,它的功能是將一個數據元素的無序序列調整成為一個有序序列,以提高查詢的效率。
三、 實驗內容
排序(氣泡排序)
若有一個數組(或列)它有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

結果:
在這裡插入圖片描述