上标3下标6算法_插入排序算法导学案
插入排序算法導(dǎo)學(xué)案
一題目1.?某程序代碼如下:Const size = 20 '數(shù)組分配空間Dim a(1 To size) As IntegerDim i As Integer, n As Integer '數(shù)組實際長度Private Sub Command1_Click() Dim p As Integer, x As Integer x = Val(Text3.Text) '插入數(shù)據(jù) p = Val(Text4.Text) '插入位置 If p > n Then p = n + 1 For i = n To p Step -1 a(i + 1) = a(i) Next i a(p) = x n = n + 1End Sub已知原數(shù)組長度n=5,其元素值依次為“48,36,24,97,77”?,先在文本框Text3和Text4中分別輸入3和4,點擊按鈕Command1后,數(shù)組的元素值依次為??????????????????? ;再在文本框Text3和Text4中分別輸入8和9,點擊按鈕Command1后,數(shù)組的元素值依次為??????????????????? 。2.?已知原數(shù)組長度n=5,其元素值依次為“4,6,7,9,12”?,要求插入新元素x=5以后,數(shù)組仍保持升序排列。下面的代碼能實現(xiàn)前述功能,請將缺失的代碼補充完整。Const size = 20 '數(shù)組分配空間Dim a(1 To size) As IntegerDim i As Integer, n As Integer '數(shù)組實際長度Private Sub Command2_Click() Dim p As Integer, x As Integer x = Val(Text3.Text) '插入數(shù)據(jù) For p = 1 To n If a(p) > x Then ① Next p For i = n To p Step -1 a(i + 1) = ② Next i a(p) = ③ n = n + 1End Sub上述代碼設(shè)置了2個For循環(huán)結(jié)構(gòu),第一個For循環(huán)通過比較a(p)與x的值來定位插入位置p(p指向第一個大于x的元素下標(biāo)或n+1),第二個For循環(huán)通過移位操作將x插入到p位置處。能否把比較和移位操作放到同一個For循環(huán)里?如果可以,該如何實現(xiàn)?3.?對存放原始數(shù)據(jù)的數(shù)組,從第2個元素開始,掃描左側(cè)的已排序區(qū)間,依次將待排序元素插入到正確位置。每趟處理一個元素,總共排序n-1趟。這種排序方式成為插入排序。下面的代碼能夠?qū)崿F(xiàn)插入排序算法,請將缺失的代碼補充完整。Const n = 10Dim a(1 To n) As IntegerPrivate Sub Command3_Click() Dim x As Integer For i = 2 To n x = a(i) For j = i - 1 To 1 Step -1 If a(j) <= x Then ① a(j + 1) = ② Next j a(j + 1) = ③ Next iEnd Sub4.對存放原始數(shù)據(jù)的數(shù)組,從a(2)開始,掃描左側(cè)的已排序區(qū)間,依次將待排序元素插入到正確位置。每趟處理一個元素,總共排序n-1趟。這種排序方式成為插入排序。下面的代碼能夠?qū)崿F(xiàn)插入排序算法,請將缺失的代碼補充完整。Const n = 10Dim a(0 To n) As IntegerPrivate Sub Command5_Click() For i = 2 To n a(0) = a(i): j = i - 1 Do While ① a(j + 1) = ② j = j - 1 Loop a(j + 1) = ③ Next iEnd Sub5.下面的代碼希望能夠?qū)崿F(xiàn)插入排序算法,但當(dāng)數(shù)組a(1)到a(10)的值依次為3,1,2,5時,程序運行系統(tǒng)報錯,錯在哪里?如何改進?Const n = 4Dim a(1 To n) As IntegerPrivate Sub Command4_Click() Dim x As Integer For i = 2 To n x = a(i): j = i - 1 Do While j >= 1 And x < a(j) a(j + 1) = a(j) j = j - 1 Loop a(j + 1) = x Next iEnd Sub6.?某程序代碼如下:Const n = 5Dim a(1 To n) As IntegerPrivate Sub Command6_Click() Dim t As Integer For i = 2 To n For j = i To 2 Step -1 If a(j - 1) > a(j) Then t = a(j): a(j) = a(j - 1): a(j - 1) = t Else Exit For End If Next j Next iEnd Sub(1)若排序前數(shù)組元素a(1)到a(5)分別是“3,6,8,5,2”,則單擊按鈕Command1后,數(shù)組元素a(1)到a(5)分別是?????????????????? 。(2)題目代碼采用了雙重For循環(huán)嵌套結(jié)構(gòu),你能否將內(nèi)層循環(huán)改成do循環(huán)結(jié)構(gòu)。(3)上述代碼看上去和冒泡排序非常相似,但同時具備插入排序算法的某些特征,你覺得它更接近冒泡排序還是插入排序算法呢?為什么?二答案1.?【答案】
(1)48,36,24,3,97,77?
(2)48,36,24,3,97,77,8
2.【答案】
① Exit For? ② a(i)? ③ x
參考代碼:
Private Sub Command2_Click() Dim x As Integer x = Val(Text3.Text) '插入數(shù)據(jù) For i = n To 1 Step -1 If a(i) <= x Then Exit For a(i + 1) = a(i) Next i a(i + 1) = x n = n + 1End Sub3.【答案】① Exit For? ② a(j)? ③ x
【解析】插入排序算法最重要的操作就是向左側(cè)已排序區(qū)間插入待排序元素。外層循環(huán)用來控制待排序元素位置,內(nèi)層循環(huán)用來掃描已排序區(qū)間,為待排序元素騰出插入位置。
4.【答案】① a(0) < a(j)? ② a(j)? ③ a(0)
【解析】設(shè)置數(shù)組下標(biāo)下界為0,既解決了數(shù)組下標(biāo)越界問題(無需判斷j >= 1,j=0時循環(huán)自然結(jié)束),又可以使用a(0)作為輔助空間存儲a(i)的值一舉兩得。
5.【答案】程序運行,當(dāng)j=0時會出現(xiàn)數(shù)組下標(biāo)越界錯誤。解決數(shù)組下標(biāo)越界問題有兩種方法:1.擴大數(shù)組下標(biāo)下界;2.提前跳出循環(huán)。
方法一:擴大數(shù)組下標(biāo)下界。把數(shù)組a的定義語句改成Dim a(0 To n) As Integer
方法二:提前跳出循環(huán)。當(dāng)j=0時,跳出循環(huán)。參考代碼如下:
Const n = 4Dim a(1 To n) As IntegerPrivate Sub Command4_Click() Dim x As Integer For i = 2 To n x = a(i): j = i - 1 Do While x < a(j) '無需判斷j >= 1,j=0時循環(huán)結(jié)束 a(j + 1) = a(j) j = j – 1 If j = 0 Then Exit Do Loop a(j + 1) = x Next iEnd Sub6. 【答案】(1)2, 3, 5, 6, 8
(2)參考代碼:
Const n = 5Dim a(1 To n) As IntegerPrivate Sub Command6_Click() Dim t As Integer For i = 2 To n j = i Do While a(j - 1) > a(j) t = a(j): a(j) = a(j - 1): a(j - 1) = t If j > 2 Then j = j - 1 Else Exit Do Loop Next iEnd Sub(3)冒泡排序的本質(zhì)特征是內(nèi)層循環(huán)掃描待排序區(qū)間將最小值(或最大值)向左端(或右端)冒泡,交換操作只能發(fā)生在相鄰元素之間。
插入排序的本質(zhì)特征是內(nèi)層循環(huán)掃描已排序區(qū)間,將待排序元素插入(或交換)到正確位置。
二者的本質(zhì)區(qū)別在于內(nèi)層循環(huán)掃描的范圍,冒泡排序是掃描待排序區(qū)間,而插入排序是掃描已排序區(qū)間。
本題內(nèi)層循環(huán)的掃描范圍的已排序區(qū)間,故更接近插入排序。
因為本題沒有設(shè)置臨時變量t來存儲待排序元素a(i),不能采用移位方式來插入a(i),所以只好采用交換相鄰元素的方式將a(i)放到正確位置,這種做法和低效的選擇排序相似,我們可以稱之為低效的插入排序算法。
需要本文word版的,可以加入“選考VB算法解析”知識星球參與討論和下載文件,“選考VB算法解析”知識星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。
我們專注選考VB算法,感興趣就一起來!
相關(guān)優(yōu)秀文章:
?2019年VB選考算法分析文章分類
選考VB算法專題系列講座0課程簡介
總結(jié)
以上是生活随笔為你收集整理的上标3下标6算法_插入排序算法导学案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实现文件共享_改进的一行Py
- 下一篇: 苹果系统u盘装win10错误怎么回事 苹