VB程序设计

2018-01-13  本文已影响0人  莫底凯

VB程序设计

VB6.0似乎已经成为开发者的往事,但是Microsoft Office系列软件的控制和操作仍然是基于VB6.0的。本项目是为所有学习VB6.0的同学而建立的。

问题1: 排序算法

排序算法是计算机程序设计中最经典的算法,在计算机的专业课《数据结构》中有大量的讨论和分析。我们在这里只讨论最简单的选择排序冒泡排序。讨论从一个填空题开始。

' 功能:将数组a()中的元素按从小到大排序'
' 参数:数组a()的下标索引为从1到30'
Sub bubble_sort(a() As Integer)
    For i = 1 To 29
        For j = 【2】
            If a(i) > a(j) Then
                m = a(i): a(i) = a(j): a(j) = m
            End If
        Next j
    Next i
End Sub

问题:【2】这个地方应该填什么?是 i+1 To 30?还是 1 To 30-i?

'代码块1
Sub selection_sort(a() As Integer)
    For i = 1 To 30
        '从a(i) 到 a(30)中找到最小的元素a(p)'
        '将a(i)和a(p)的值交换'
    Next i
End Sub

那么,怎么从a(i) 到 a(30)中找到最小的元素a(p)呢?可以这样做:

'代码块2
p = a(i) '首先,假设a(i)就是最小的'
For j = i To 30 '从a(i) 扫描到 a(30)'
    If p > a(j) Then '一旦发现p比a(j)还大,就让p指向a(j)'
        p = a(j)
    End If
Next j

上述做法,就是选择排序的思想。我们可以将代码优化下:
首先,j 不必从 i 开始扫描,因为当 j = i 时,a(j)没有必要跟a(p)进行比较(这时,p 也等于 i)。
其次,p 指向a(i)的索引就可以了,没有必要指向a(i)。

'代码块3
p = i ' 假设a(i)就是最小的
For j = i+1 To 30
    If a(p) > a(j) Then  '一旦发现a(p)比a(j)还大,就让 p 指向 j
        p = j
    End If
Next j

这时,将代码块3嵌入代码块1,就可以得到完整的选择排序的代码了:

'代码块4
Sub selection_sort(a() As Integer)
    For i = 1 To 30
        '从a(i) 到 a(30)中找到最小的元素a(p)
        p = i '假设a(i)就是最小的
        For j = i+1 To 30
            If a(p) > a(j) Then '一旦发现a(p)比a(j)还大,就让 p 指向 j
                p = j
            End If
        Next j
        '将a(i)和a(p)的值交换(代码略)'
    Next i
End Sub
' 代码块5
Sub selection_sort(a() As Integer)
    For i = 1 To 30
        ' 从a(i) 到 a(30)中找到最小的元素a(p)
        ' 假设a(i)就是最小的,并且始终存放剩余元素中的最小值
        For j = i+1 To 30
            If a(i) > a(j) Then '一旦发现a(i)比a(j)还大,就让它们交换
                m = a(i): a(i) = a(j) : a(j) = m
            End If
        Next j
    Next i
End Sub
上一篇下一篇

猜你喜欢

热点阅读