数组---算法(选择,冒泡)排序

前言:最近正在研究vb的数组,正好数组这章涉及到了一点简单的排序。选择排序和冒泡排序,利用这两种排序方法。做一个把随机生成的10个数。按照从大到小排序,从小到大也可以。其实算法就是一个,解决问题的思想。如果类比到,数学里面的话。算法的抽象,就好比是函数y=f(x)。

目录

思想:

       (一)选择排序

       (二)冒泡排序

例子:

   选择排序

   对 1  8  7   5    9    2    4    3    0 进行从大到小排序

  冒泡排序

效果图

思想:

       (一)选择排序

                 就用这章的例子理解,先假设第一个元素里面的数是最大的。然后用第一个元素里面的数和后面的每一个元素里的数做对比,符合你的要求就把里面的数值进行交换,继续往后对比。按照从大到小排序,每轮对比完都会产生一个本轮最大的放到前面。

       (二)冒泡排序

          还是这章的例子为例,冒泡排序的思想:按照大数上浮,小数下沉。按照这句话可以理解,把大数和小数进行分离。还是用对比的思想,不过这次不是全局对比。而是局部的对比,每次都会用数组的前一个和后一个。进行两两对比,按照这种方式对比每轮都会产生一个本轮最小的放到后面。

例子:

   选择排序

         

'通用
Dim a()   '定义排序数组
Dim p As String '用于输出随机数
Dim yes, i, j, x, t As Integer '定义do 条件   

'命令按钮单击事件 
   p = ""
    For i = 1 To 9 '选择排序
        For j = i + 1 To 10 '从第二个一次往后比较大小 a(j)是代表,a(i)数组的第几个元素
            If a(i) < a(j) Then '如果a(i)的数组小于a(j)的数组,交换数组的值
                t = a(i)
                a(i) = a(j)
                a(j) = t   '赋值交换
            End If
        Next j
    Next i
    For i = 1 To 10
        p = p & Str(a(i)) & "," 'str()将数值类型,转换为字符类型。
    Next i
    Label2.Caption = LTrim(Left(p, Len(p) - 1))
'窗体加载事件
    Randomize '产生随机数源
    p = ""
    For i = 1 To 10 '产生随机数
        Do
            x = Int(Rnd * 91) + 10 '产生十个整数
            yes = 0
            For j = 1 To i - 1 '产生的数组元素不相同
                If x = a(j) Then yes = 1: Exit For '如果 x等于a(j)则 yes的值改为1 是do 循环结束
            Next j
        Loop While yes = 1
        a(i) = x '把a(j)值赋给a(i)数组
        p = p & Str(a(i)) & ","
    Next i
    Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'len得到字符串的长度,然后减1
                                                                     'left(要截取的字符,截取字符长度)
    Label2.Caption = ""                                   'ltrim去除空格

对 1  8  7   5    9    2    4    3    0 进行从大到小排序

'通用
Dim a()   '定义排序数组
Dim p As String '用于输出随机数
Dim yes, i, j, x, t As Integer '定义do 条件
'命令按钮
For i = 0 To UBound(a) - 1 '对比几次
        For j = i + 1 To UBound(a) '从第几个开始
            If a(i) < a(j) Then
                t = a(i)
                a(i) = a(j)
                a(j) = t
            End If
        Next j
     Next i
     Label2.Caption = Join(a) '输出排序结果 join函数是把数组,以字符串输出。
'窗体加载
    a = Array(1, 8, 7, 5, 9, 2, 4, 3, 0) '给数组赋值   
    Label1.Caption = Join(a) 'Jonin 把一维数组元素,一字符串形式输出

      

冒泡排序

'通用
Dim a(1 To 10) As Integer    '定义排序数组
Dim p As String '用于输出随机数
Dim yes, i, j, x, t As Integer '定义do 条件
'命令按钮
    p = ""
    For i = 1 To 9 '冒泡排序 进行九次对比
        For j = 1 To 10 - i '每轮对比都产生一个最小的放到最后,然后下一轮从开始到n-i
            If a(j) < a(j + 1) Then '用数组的前一个和后面的进行比较,每次都是两两比较。
                t = a(j)
                a(j) = a(j + 1)
                a(j + 1) = t
            End If
        Next j
    Next i
    For i = 1 To 10 '数组赋值
        p = p & Str(a(i)) & ","
    Next i
    Label2.Caption = LTrim(Left(p, Len(p) - 1))
'窗体加载
  Randomize '产生随机数源
    p = ""
    For i = 1 To 10 '产生随机数
        Do
            x = Int(Rnd * 91) + 10 '产生十个整数
            yes = 0
            For j = 1 To i - 1 '产生的数组元素不相同
                If x = a(j) Then yes = 1: Exit For '如果 x等于a(j)则 yes的值改为1 是do 循环
            Next j
        Loop While yes = 1
        a(i) = x '把a(j)值赋给a(i)数组
        p = p & Str(a(i)) & ","
    Next i
    Label1.Caption = LTrim(Left(p, Len(p) - 1)) 'len得到字符串的长度,然后减1
                                                                     'left(要截取的字符,截取字符长度)
    Label2.Caption = ""                                   'ltrim去除空格

效果图


posted @ 2019-07-20 20:17  康世行  阅读(31)  评论(0编辑  收藏  举报