VB常用算法6排序_第1頁
VB常用算法6排序_第2頁
VB常用算法6排序_第3頁
VB常用算法6排序_第4頁
VB常用算法6排序_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、VB常用算法-排序1、選擇法排序(1) 利用循環(huán)從n個數(shù)中選出最小數(shù)的下標(biāo),結(jié)束循環(huán)后,將最小數(shù)與第一個數(shù)交換位置;(2) 除第一個數(shù)外,在剩下的n-1個數(shù)中再按方法(1)選出次小的數(shù),與第二個數(shù)交換位置; (3) 以此類推,最后構(gòu)成遞增序列。 譬如: 869327 第一輪交換后269387 第二輪交換后239687 第三輪交換后236987 第四輪交換后236789 第五輪無交換236789 程序代碼如下: Private Sub xzPaiXu(a() As Double, sheng As Boolean) a為需要排序的數(shù)組,sheng為True則為升序排列,為False,則為降序排列

2、。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer For i = LBound(a) To UBound(a) - 1 進(jìn)行數(shù)組大小-1輪比較 m = i 在第i輪比較時,假定第 i個元素為最值元素 For j = i + 1 To UBound(a) 在剩下的元素中找出最 值元素的下標(biāo)并記錄在m中 If sheng Then 若為升序,則m記錄最小元素 下標(biāo),否則記錄最大元素下標(biāo) If a(j) a(m) Then m = j End If Next j 將最值元素與第i個元素交換 temp = a(i)

3、 a(i) = a(m) a(m) = temp Next i End Sub 調(diào)用該過程示例: Option Base 1 Private Sub Command1_Click() Dim b(6) As Double b(1) = 8 b(2) = 6 b(3) = 9 b(4) = 3 b(5) = 2 b(6) = 7 Call xzPaiXu(b, True) For i% = 1 To 6 Print b(i) Next End Sub 2、冒泡法排序選擇排序法在每一輪排序時尋找最值元素的下標(biāo),出了內(nèi)循環(huán)(一輪排序結(jié)束時,確定最值下標(biāo)),再交換最小數(shù)的位置;而冒泡法在每一輪排序時將

4、相鄰的數(shù)比較,當(dāng)次序不對時就立即交換位置,出了內(nèi)循環(huán),最值數(shù)已經(jīng)冒出。 譬如: 第一輪比較結(jié)束后,最值冒出869327 8 6 9 3 2 7 8 6 9 2 3 7 8 6 2 9 3 7 8 2 6 9 3 7 2 8 6 9 3 7 . 第二輪次最值冒出 2 3 8 6 9 7 . 第三輪排序后2 3 6 8 7 9 . 第四輪排序后 2 3 6 7 8 9 . 第五輪排序后2 3 6 7 8 9 程序代碼如下: Private Sub mpPaiXu(a() As Double, sheng As Boolean) a為需要排序的數(shù)組,sheng為True則為升序排列,為False,則

5、為降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer For i = LBound(a) To UBound(a) - 1 進(jìn)行n-1輪比較 For j = UBound(a) To i + 1 Step -1 從n到i個元素兩兩進(jìn)行比較 循環(huán)變量j終值為I+1,是因為比較過程中元素下標(biāo)用到j(luò)-1 If sheng Then 若次序不對,馬上進(jìn)行交換 If a(j) a(j - 1) Then temp = a(j) a(j) = a(j - 1) a(j - 1) = temp End If End

6、 If 出了內(nèi)循環(huán),一輪排序結(jié)束 Next j 最值元素冒到最上邊 Next i End Sub 調(diào)用該過程代碼與前面的選擇法排序相同。 3、實戰(zhàn)練習(xí) 1) 完善程序填空(2003秋二(10) 下面是一個采用拉鋸式排序法對數(shù)組元素按升序進(jìn)行排序的程序,所謂“拉鋸式排序法”是前一遍把最小的元素從下到上送到最上的位置,后一遍則是從上到下把最大的元素送到最下的位置。 Option Base 1 Private Sub Command1_Click() Dim a(10) As Integer,i As Integer For i = 1 To 10 a(i) = Int(Rnd * 10)+1 Te

7、xt1 = Text1 & Str(a(i) Next i Call shaker_sort(a) For i = 1 To 10 Text2 = Text2 & Str(a(i) Next i End Sub Private Sub Shaker_sort(k() As Integer) Dim i As Integer, c As Integer, d As Integer Dim t As Integer c = 1 d = ( 1 ) Do For ( 2 ) Step -1 If k(i - 1) k(i) Then t = k(i - 1): k(i - 1) = k(i): k(i) = t End If Next i ( 3 ) For i = c + 1 To d If ( 4 ) Then t = k(i - 1): k

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論