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