|
|
'------------------------------------------------------------------------
' 這個(gè)程序演示了插入排序算法
' 我們可以實(shí)現(xiàn)從低到高排序
' 也可以實(shí)現(xiàn)從高到低排序
' 該算法可以對(duì)任何數(shù)值型數(shù)組進(jìn)行排序(不支持字符串)
'------------------------------------------------------------------------
$regfile = "m8def.dat" ' 指定使用的微控制器型號(hào)文件
$crystal = 8000000 ' 使用的晶振頻率(16MHz)
$baud = 9600 ' 使用的波特率
$hwstack = 32 ' 硬件堆棧大小
$swstack = 32 ' 軟件堆棧大小
$framesize = 32 ' 幀大小
Dim Onlongs(17) As Long ' 待排序的數(shù)組,根據(jù)需要使用Long/Word/Byte類型
Dim X As Byte ' 循環(huán)計(jì)數(shù)器
' 聲明子程序
Declare Sub Arraysortasc() ' 升序排序
Declare Sub Arraysortdec() ' 降序排序
'---用于測(cè)試的示例數(shù)據(jù)---
Onlongs(1) = 270
Onlongs(2) = 120
Onlongs(3) = 99
Onlongs(4) = 1452
Onlongs(5) = 978
Onlongs(6) = 22
Onlongs(7) = 180
Onlongs(8) = 721
Onlongs(9) = 622
Print "排序開(kāi)始>" ' 打印排序開(kāi)始提示
Waitms 10 ' 等待10毫秒
Call Arraysortasc ' 調(diào)用升序排序子程序
Print "排序升序結(jié)果:" ' 打印升序排序完成提示
For X = 1 To 9 ' 循環(huán)打印排序后的數(shù)組
print Onlongs(x) ; "-";
Next X
print ' 換行
print
print "升序轉(zhuǎn)為降序"
Call Arraysortdec ' 調(diào)用降序排序子程序
Print " 降序排序" ' 打印降序排序完成提示
For X = 1 To 9 ' 循環(huán)打印排序后的數(shù)組
print Onlongs(x) ; "-";
Next X
End ' 程序結(jié)束
'----------- 使用插入排序算法對(duì)Long類型數(shù)組進(jìn)行排序,其他類型變量也可使用 -----------
Sub Arraysortasc()
Local Al As Long ' 用于存儲(chǔ)當(dāng)前待插入元素的臨時(shí)變量
Local I As Byte ' 外層循環(huán)計(jì)數(shù)器
Local J As Byte ' 內(nèi)層循環(huán)計(jì)數(shù)器
Local Z As Byte ' 用于打印數(shù)組的計(jì)數(shù)器
For I = 2 To 9 ' 從第二個(gè)元素開(kāi)始遍歷數(shù)組
Al = Onlongs(i) ' 保存當(dāng)前元素值
J = I ' 初始化內(nèi)層循環(huán)計(jì)數(shù)器
' 尋找合適的插入位置
While J > 1 And Onlongs(j -1) > Al ' 當(dāng)前元素比前一個(gè)元素小時(shí)
Onlongs(j) = Onlongs(j - 1) ' 將前一個(gè)元素后移
J = J - 1 ' 繼續(xù)向前比較
' 打印排序過(guò)程(調(diào)試用)
For Z = 1 To 9
print Onlongs(z) ; "-" ;
Waitms 200
Next
Waitms 200 ' 等待2秒便于觀察
print ' 換行
Wend
Onlongs(j) = Al ' 將當(dāng)前元素插入到正確位置
Next
End Sub
Sub Arraysortdec()
' 降序排序?qū)崿F(xiàn),與升序類似只是比較條件相反
Local Al As Long ' 用于存儲(chǔ)當(dāng)前待插入元素的臨時(shí)變量
Local I As Byte ' 外層循環(huán)計(jì)數(shù)器
Local J As Byte ' 內(nèi)層循環(huán)計(jì)數(shù)器
Local Z As Byte ' 用于打印數(shù)組的計(jì)數(shù)器
For I = 1 To 9 ' 從第一個(gè)元素開(kāi)始遍歷數(shù)組
Al = Onlongs(i) ' 保存當(dāng)前元素值
J = I ' 初始化內(nèi)層循環(huán)計(jì)數(shù)器
' 尋找合適的插入位置
While J > 1 And Onlongs(j -1) < Al ' 當(dāng)前元素比前一個(gè)元素大時(shí)
Onlongs(j) = Onlongs(j - 1) ' 將前一個(gè)元素后移
J = J - 1 ' 繼續(xù)向前比較
' 打印排序過(guò)程(調(diào)試用)
For Z = 1 To 9
print Onlongs(z) ; "-" ;
Next
Wait 2 ' 等待2秒便于觀察
print ' 換行
Wend
Onlongs(j) = Al ' 將當(dāng)前元素插入到正確位置
Next
End Sub
76.gif (613.41 KB, 下載次數(shù): 0)
下載附件
2025-8-5 14:29 上傳
|
評(píng)分
-
查看全部評(píng)分
|