第一范文网 - 专业文章范例文档资料分享平台

VB常用算法6 排序

来源:用户分享 时间:2020-06-23 本文由张望的时光 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

VB常用算法----排序

1、选择法排序

(1) 利用循环从n个数中选出最小数的下标,结束循环后,将最小数与第一个数交换位置;

(2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;

(3) 以此类推,最后构成递增序列。 譬如:

8 2 2 2 2 2

6 6 3 3 3 3

9 9 9 6 6 6

3 3 6 9 7 7

2 8 8 8 8 8

7 7 7 7 9 9

第一轮交换后 第二轮交换后 第三轮交换后 第四轮交换后 第五轮无交换

程序代码如下:

Private Sub xzPaiXu(a() As Double, sheng As Boolean)

'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer

For i = LBound(a) To UBound(a) - 1 '进行数组大小-1轮比较 m = i '在第i轮比较时,假定第 'i个元素为最值元素 For j = i + 1 To UBound(a) '在剩下的元素中找出最 '值元素的下标并记录在m中 If sheng Then '若为升序,则m记录最小元素 '下标,否则记录最大元素下标 If a(j) < a(m) Then m = j Else

If a(j) > a(m) Then m = j End If

Next j '将最值元素与第i个元素交换 temp = a(i) a(i) = a(m)

a(m) = temp Next i End Sub

调用该过程示例:

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、冒泡法排序

选择排序法在每一轮排序时寻找最值元素的下标,出了内循环(一轮排序结束时,确定最值下标),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对时就立即交换位置,出了内循环,最值数已经冒出。 譬如:

第一轮比较结束后,最值冒出

8 6 9 3 2 7

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为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer

For i = LBound(a) To UBound(a) - 1 '进行n-1轮比较

For j = UBound(a) To i + 1 Step -1 '从n到i个元素两两进行比较

'循环变量j终值为I+1,是因为比较过程中元素下标用到j-1 If sheng Then '若次序不对,马上进行交换 If a(j) < a(j - 1) Then temp = a(j) a(j) = a(j - 1) a(j - 1) = temp End If Else

If a(j) > a(j - 1) Then temp = a(j) a(j) = a(j - 1) a(j - 1) = temp End If

End If '出了内循环,一轮排序结束

Next j '最值元素冒到最上边 Next i End Sub

调用该过程代码与前面的选择法排序相同。

3、实战练习

1) 完善程序填空(2003秋二(10))

下面是一个采用拉锯式排序法对数组元素按升序进行排序的程序,所谓“拉锯式排序法”是前一遍把最小的元素从下到上送到最上的位置,后一遍则是从上到下把最大的元素送到最下的位置。

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 Text1 = 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(i - 1) = k(i): k(i) = t End If Next i d = d - 1

Loop While ( 5 ) End Sub

2) 编程题(2002秋上机试卷04)

把文本框输入的字符串按降序添加到列表框中。

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新高中教育VB常用算法6 排序 全文阅读和word下载服务。

VB常用算法6 排序 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1098473.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top