VB常用的算法——排序
计算机考试二级VB常用算法:排序
计算机考试二级VB常用算法(9):排序
1、算法说明
1)初等数学
递推法
又称为”迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都在旧值的基础上递推出新值,并由新值代替旧值。
问题:猴子吃桃子
小猴子有若干桃子,第一天吃掉一半多一个;第二天吃掉剩下的—半多一个••…;如此,到第七天早上要吃时,只剩下一个桃子。问小猴子一开始共有多少桃子?
分析:可以最后一天桃子数推出倒数第二天的桃子数;再从倒数第二天推出倒数第三天桃子数........
设第n天桃子数为xn ,前一天桃子数是:xn -1 z则有关系:
xn = xn -1/2
程序如下:
Private Sub Commandl_Click()
Dim n%, i%
x =「第七天桃子数
Print ”第七天桃子数:1只”
For i = 6 To 1 Step
x = (x + 1) * 2
Print “第“ & i & "天桃子数:” & x & ”只”
Next i
End Sub
穷举法
又称枚举法,即将所有可能情况一一测试,判断是否满足条件,—般用循环实现。
问题:百元买鸡问题。
假定小鸡每只5角;公鸡每只2元;母鸡每只3元。现在有100 元,要求买100只鸡,编程列出所有可能的购鸡方案。
分析:
设母鸡、公鸡、小鸡分别x、y、z只,则有:
x + y+ z = 100
3x + 2y + 0.5z = 100
程序一:
Private Sub Commandl_Click()
Dim x%, y%, z%
For x = 0 To 100
For y = 0 To 100
vb常用算法
1、主次对角线求和(可以写成过程的形式)Private Function SumMain(a() as integer) For i = 1 To Ubound(a,1)
s = s + a(i, i)
Next i
sumMain=s
End Function
Private Function SumFu(a() as integer) For i = 1 To Ubound(a,1)
s = s + a(i, Ubound(a,1) + 1 - i)
Next i
sumFu=s
End Sub
2、斐波那锲数列(后一项为前面两项之和) Private sub Fib(n as Integer)
Dim a() as Integer
a(1) = 1: a(2) = 1
redim preserve a(n)
For i = 3 To n
a(i) = a(i - 1) + a(i - 2)
redim preserve a(i)
Next i
End Sub
3、冒泡法排序
Private Sub Sort(a() as Integer)
For i = 1 To Ubound(a) - 1
For j = i + 1 To Ubound(a)
If A(i) > A(j) Then '''判断a(i)与a(j+1)谁大,把大的放到前边
t = A(i)
A(i) = A(j)
A(j) = t
End If
Next j
Next i
''如果要从小到大排就把"A(j) > A(j - 1)"改称"A(j) < A(j - 1)" End Sub
VB常用算法介绍
VB常用算法介绍
在VB程序开发中,常常需要使用各种算法来处理数据和解决问题。下面将介绍几种常用的VB算法,包括排序算法、算法和图算法等。
1.排序算法
排序算法用来将一组数据按照一定的规则进行排列。常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序等。
冒泡排序(Bubble Sort)是一种交换排序算法,通过不断地相邻元素比较和交换,将较大的元素逐渐交换到末尾,从而实现排序。冒泡排序的时间复杂度为O(n^2)。
选择排序(Selection Sort)是一种排序算法,每次从待排序的数据元素中选择最小(或最大)的一个元素,放到已排序的序列的末尾。选择排序的时间复杂度为O(n^2)。
插入排序(Insertion Sort)是一种排序算法,将数组元素分为已排序和未排序两部分,每次从未排序的部分中取出一个元素,插入到已排序的部分的适当位置。插入排序的时间复杂度为O(n^2)。
归并排序(Merge Sort)是一种分治排序算法,将待排序的数据分为两个子序列,然后递归地对子序列进行排序,并将两个已排序的子序列合并成一个有序序列。归并排序的时间复杂度为O(nlogn)。
快速排序(Quick Sort)是一种分治排序算法,通过一次划分将待排数据分成左右两个子序列,然后递归地对子序列进行排序。快速排序的时间复杂度为O(nlogn)。
2.算法
算法用来在一个数据集合中查找一些元素或满足特定条件的元素。常
见的算法包括线性、二分和深度优先。
线性(Linear Search)是一种简单的算法,从数据集合的第一个元
VB常用算法总结大全
VB常用算法总结大全
VB(Visual Basic)是一种对初学者友好的编程语言,因其简单易学的特点而受到很多人的喜爱。在VB中,算法是编程过程中非常重要的一部分,它们用来解决各种问题,从简单的数学计算到复杂的数据处理。本文将总结一些常用的算法,帮助VB程序员更好地应用于实际项目中。
一、排序算法
1.冒泡排序
冒泡排序是一种简单的排序算法,它通过不断地交换相邻的元素来对数据进行排序。它的基本思想是从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序不正确,则交换它们的位置。重复这个过程,直到整个列表都已经排序。
2.快速排序
快速排序是一种高效的排序算法,它通过选择一个基准元素,将列表分为两部分,一部分小于基准元素,一部分大于基准元素。然后对这两部分分别进行快速排序,最后将它们合并在一起。
3.插入排序
插入排序是一种简单直观的排序算法,它将列表分为已排序和未排序两部分,每次选择未排序部分的第一个元素,并插入到已排序部分的适当位置。重复这个过程,直到整个列表都已经排序。
二、查找算法
1.顺序查找
顺序查找是一种简单的查找算法,它从列表的第一个元素开始,依次比较每个元素,直到找到目标元素或者遍历完整个列表。
2.二分查找
二分查找是一种高效的查找算法,它要求列表已经排序。它通过比较目标元素与列表中间元素的大小关系来确定要的部分,并缩小范围。重复这个过程,直到找到目标元素或者确定列表中没有目标元素。
三、图算法
1.深度优先(DFS)
深度优先是一种用于图遍历的算法,它从一个起始点开始,沿着一个路径尽可能深地访问节点,直到遇到一个没有未访问过的相邻节点为止。然后回溯到前一个节点,寻找其他路径。
vb排列递归,要求输入随机n个数,输出m个数的组合
VB排列递归算法是一种用于处理组合问题的经典算法。它可以帮助我们在给定一组数的情况下,找出其中任意个数的排列组合。在使用中,我们可以输入随机n个数,然后利用VB排列递归算法输出m个数的
组合。今天,我们就来详细介绍一下VB排列递归算法的原理和操作步骤。
一、VB排列递归算法的原理
1.1 递归算法
递归算法是一种常见的解决问题的方法,它是指在函数的定义中
使用函数本身的方法。在VB排列递归算法中,递归的核心思想是将大问题分解为小问题,然后通过递归调用来解决小问题。
1.2 排列组合
在数学中,排列和组合是常见的概念。排列是指从给定的元素中
按照一定顺序选取一定数量的元素,而组合是指从给定的元素中选取
一定数量的元素,顺序无关紧要。VB排列递归算法可以帮助我们高效地求解排列和组合的问题。
二、VB排列递归算法的操作步骤
现在,我们来介绍一下使用VB排列递归算法求解组合问题的具体操作步骤。
2.1 输入随机n个数
我们需要输入一组随机的n个数,这些数可以是整数、小数或者
是字符串,根据实际需求而定。
2.2 设置输出m个数的组合
接下来,我们需要设置输出m个数的组合,即从输入的n个数中选取m个数进行组合。
2.3 编写VB排列递归算法
在VB编程环境中,我们需要编写排列递归算法的具体代码。这部分代码主要涉及递归函数的定义和递归调用的实现,通过递归的方式来实现排列组合的求解。
2.4 执行VB排列递归算法
一切准备就绪后,我们可以执行VB排列递归算法,得到输出m 个数的组合结果。这些组合结果可以是打印输出、保存到文件或者在界面中展示,根据实际需求进行选择。
VB常用算法总结
VB常用算法总结
在VB(Visual Basic)编程中,常用的算法有很多。下面将对其中
一些常见和重要的算法进行总结。请注意,由于篇幅限制,这只是一个简
要总结,无法涵盖所有算法的细节。
1.排序算法:
排序算法是计算机科学中最基本和常见的算法之一、在VB中,常用
的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。排序算法通过比较和交换来对一组数据进行重新排列,使其按照指定的顺
序排列。
2.查找算法:
查找算法用于在一个数据集中寻找特定的值或元素。在VB中,常用
的查找算法有二分查找和线性查找等。二分查找是一种高效的算法,可以
在有序数组中快速地找到目标元素。
3.图算法:
图算法是用于解决与图相关的问题的算法。在VB中,常用的图算法
包括广度优先(BFS)和深度优先(DFS)等。这些算法可以用于寻找图中
的路径、检测环和遍历图等操作。
4.动态规划:
动态规划是一种用于解决最优化问题的算法。在VB中,常用的动态
规划算法有背包问题、最长公共子序列和最短路径等。动态规划算法通过
拆解问题为子问题,并保存子问题的解来避免重复计算,从而提高算法的
效率。
5.字符串匹配:
字符串匹配算法用于在一个字符串中查找另一个字符串。在VB中,
常用的字符串匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。这些算法通过比较字符来确定字符串的匹配位置。
6.线性代数:
线性代数是数学的一个分支,用于解决线性方程组和向量空间等问题。在VB中,常用的线性代数算法有矩阵运算、向量运算和线性方程求解等。这些算法可以应用于计算机图形学、数据分析和机器学习等领域。
VB常用算法大全
VB常用算法大全
在VB中实现常用算法是程序开发中非常常见的任务之一、下面将介绍几个常用的算法以及它们在VB中的实现方式。
1.冒泡排序算法:
冒泡排序是一种简单直观的排序算法,它通过交换相邻元素来排序。具体实现如下:
```vb
Sub BubbleSort(arr( As Integer)
Dim i As Integer, j As Integer
Dim temp As Integer
For i = LBound(arr) To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If arr(j) < arr(i) Then
temp = arr(j)
arr(j) = arr(i)
arr(i) = temp
End If
Next j
Next i
End Sub
```
2.快速排序算法:
快速排序是一种高效的排序算法,它通过选择一个基准元素并将数组分为两部分来排序。具体实现如下:
```vb
Sub QuickSort(arr( As Integer, low As Integer, high As Integer)
Dim i As Integer, j As Integer
Dim pivot As Integer, temp As Integer
i = low
j = high
pivot = arr((low + high) / 2)
While i <= j
While arr(i) < pivot
i=i+1
Wend
While arr(j) > pivot
VB常用算法总结
VB常用算法总结
VB是一种基于Visual Basic语言的编程语言,广泛应用于Windows 操作系统环境下的软件开发。在VB中,算法的选择和使用对于解决问题是至关重要的。本文将对VB常用算法进行总结,希望能给读者提供一些编程的指导和参考。
一、排序算法
排序算法是一类重要的算法,用于将一组无序的数据按照一定的规则进行排序。VB中常用的排序算法有冒泡排序、选择排序、插入排序、快速排序等。
1.冒泡排序:从序列的第一个元素开始,依次比较相邻的两个元素,如果它们的顺序错误则交换位置,直到序列被完全排序。
2.选择排序:依次选择未排序序列中的最小元素,将其放到已排序序列的末尾。
3.插入排序:将一个记录插入到已排序好的序列中,从而得到一个新的、记录数增1的有序序列。
4.快速排序:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,然后分别对这两部分记录继续进行排序,直到整个序列有序。
二、查找算法
查找算法用于在一组有序或无序的数据中寻找指定的元素。VB中常用的查找算法有线性查找、二分查找、哈希查找等。
1.线性查找:从数据的开头开始,逐个比较每一个元素,直到找到目
标元素。
2.二分查找:在有序序列中,每次将待查元素与中间位置的元素比较,如果相等则找到,否则将待查元素与中间位置的元素比较,直到找到目标
元素或序列为空。
3.哈希查找:通过哈希函数将关键字映射到一个定长的数组上,当需
要查找时,根据关键字计算出哈希地址,从数组中访问对应位置的元素。三、图算法
图算法主要用于解决图结构相关的问题,如最短路径、拓扑排序等。VB中常用的图算法有深度优先、广度优先、Dijkstra算法等。
vb数组排序
算法:
举例:随机产生20个100以内的正整数,按从小到大的顺序输出在窗体上,每行5个。Private sub form_click()
Dim x(1 to 20) as integer
For i=1 to 20
X(i)=int(rnd*99)+1 ‘随机产生100以内的随机数
Next i
Rem 冒泡排序
For i=1 to 19
For j=1 to 20-i
If x(j)>x(j+1) then t=x(j) : x(j)=x(j+1) : x(j+1)=t
Next j
Next i
Rem 按每行5个数输出
Print x(i);
If i mod 5=0 then print ‘如果每行输到5个数,则换行
End sub
二、比较交换法
算法思路:假设第一个数最小,然后第一个数依次与后面的每一个数都进行比较,若比较时发现后面的数比第一个数小,则两数位置进行交换,全部都比较完算一轮,每一轮比较完后,第一个数是最小的数,如此进行即可完成比较排序。
For i=1 to n-1 ‘i表示比较轮数
For j= i+1 t0 n ‘ J表示每轮比较次数
If a(i)>a(j) then t=a(i) : a(i)=a(j) : a(j)=t ‘如果发现后面的数比前面的数小,则两数位置进行交换
Next j
Next i
举例:有如图窗体,两个文本框、两个标签和一个命令按钮,编程实现:单击命令按钮后,随机产生10个两位正整数放在text1中,每行一个,并使用选择排序算法排序后显示在text2
文本框中,也是每行一个。
(完整版)VB常用算法——排序
VB 常考算法(八)排序:
1、算法 1)选择法排序
算法说明:根据上例中求最小值的思路, 一轮,以第一个元素逐个跟后面的所有元素比较, 轮比
较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进 行比较确定下次小的元素;以此类推…
下面我们以图形的形
式体现对
第一轮:
第二轮:
素参与跟2号元素的比较,共 3次,以次类推,比较次数逐步减少。经过四轮的比较,利用 逐步求最小值的方法将 5个数从小到大排好序。 对于这样一个排序的过程, 我们可以使用两 个循环分别控制比较的轮数和每一轮的次数。
程序代码:
Private Sub Comma nd1_Click() Dim n As In teger n = In putBox(" 请输入数组元素的个数:
")
Dim a() As In teger, i As In teger, j As In teger
Print "
排序前:”
我们可以使用如下方法进行从小到大排序:
第 如果比后面的元素大就进行交换,
经过一
1
6 4 2 5
最小值
次小值
5个数进行选择排序的过程:
第三轮:
ReDim a(n)
For i = 1 To n
a(i) = In t(R nd * (99 -10 + 1) + 10) Print a(i);
Next i
For i = 1 To n - 1 For j = i To n
If a(i) > a(j) Then temp = a(i)' a(i) = a(j) a(j) = temp End If Next j Next i Print
VB常用算法总结大全
使用Adodb.Stream对象处理二 进制数据,可以实现数据的压缩 、加密等操作。
使用MemoryStream对象在内存 中创建临时数据流,提高数据处 理效率。
感谢您的观看
THANKS
队列操作
实现入队(enqueue)、出队(dequeue)、 查看队首和队尾元素等基本操作。
3
应用举例
使用栈实现括号匹配检查、表达式求值等;使用 队列实现广度优先搜索(BFS)等算法。
06 文件操作与I/O流处理 算法
文件读写操作
顺序文件读写
使用Open、Input、Output、 Close等语句,按照文件内容的顺 序进行读写操作。
03
适用于数据量较小或者数据无序的情况。
二分查找
原理
在有序数组中,取中间元素与目标元素比较,如果目标元素小于中间元素,则在左半部分继续查找;如果目标元素大 于中间元素,则在右半部分继续查找;如果相等则查找成功。
时间复杂度
平均时间复杂度和最坏时间复杂度都是O(log n),其中n是数据结构中元素的个数。
VB常用算法总结大 全
汇报人:XX
目录
CONTENTS
• 排序算法 • 查找算法 • 图形图像算法 • 数值计算算法 • 数据结构与算法 • 文件操作与I/O流处理算法
01 排序算法
冒泡排序
时间复杂度:最好情况下为O(n),最坏和平均 情况下为O(n^2)。 稳定性:稳定。
VB常用算法6排序
VB常用算法----排序
1、选择法排序
(1) 利用循环从n个数中选出最小数的下标,结束循环后,将最小数与第一个数交
换位置;
(2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个
数交换位置;
(3) 以此类推,最后构成递增序列。
譬如:
8 6 9 3 2 7
第一轮交换后 2 6 9 3 8 7
第二轮交换后 2 3 9 6 8 7
第三轮交换后 2 3 6 9 8 7
第四轮交换后 2 3 6 7 8 9
第五轮无交换 2 3 6 7 8 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)
VB常见算法
1.累加与连乘
基本思想:设置初值,循环计算。
扩展:(1)计算指定范围内某一个数的倍数之和。
vb 编程,求从100~1000之间所有是3的倍数的数之和,当和大于3000时停止计算输出和,用for...next 语句
For i = 100 To 1000
If i Mod 3 = 0 Then
s = s + i
If s > 3000 Then Exit For
End If
Next i
Print s
(2)计算某范围内所有数的乘积。
用vb 编写一段程序,计算 1-50所有奇数的乘积
dim prod as double
dim i as integer
prod=1
for i=1 to 50 step 2
prod=prod*i
next
print prod
(3)求某一个数列的和。
本程序的功能是求下面数列前n 项之和。
1.求分数序列5
8,35,23,12,……,单击窗体显示数列前20项的和 Private Sub Form_Click()
a = 2
b = 1
s = 0
For i = 1 To 20
s = s + a / b
c = a
a = a + b
b = c
Next i
print "和为:" & s
End Sub
2.生成N 个不同的随机数
基本思想:将生成的数送入一个数组,每生成一个数后与数组中已有的数比较,如相同则丢弃,重新生成可使用语句Exit For 。
Private Sub Command1_Click()
Dim a(10) As Integer, n As Integer
Dim i As Integer, k As Integer
vb 冒泡排序法
vb 冒泡排序法
冒泡排序法是一种简单易懂的排序算法,它通过反复交换相邻的元素将序列中最大(或最小)的数逐渐“冒泡”到数列的一端。下面就让我们来看一下如何用VB编写冒泡排序算法。
在VB中,我们可以使用嵌套循环来实现冒泡排序。外层循环
控制比较的轮次,内层循环用来进行相邻元素的比较和交换。下面是冒泡排序算法的具体实现:
```
Sub BubbleSort(arr() As Integer)
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim temp As Integer
n = UBound(arr)
For i = 0 To n - 1
For j = 0 To n - i - 1
If arr(j) > arr(j + 1) Then
temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
End If
Next j
Next i
End Sub
```
以上代码定义了一个名为`BubbleSort`的子程序(Subroutine),接受一个整数数组作为参数。在子程序中,我们首先定义了几个局部变量,包括索引变量`i`和`j`、数组长度变量`n`,以及
用来交换元素的临时变量`temp`。
接下来,我们使用两层嵌套循环来进行排序。外层循环`i`控制比较的轮次,它从0开始,逐渐增加到`n-1`。内层循环`j`用来进行相邻元素的比较和交换。由于每一轮比较后,最大的元素已经“冒泡”到了数列的最后,所以内层循环只需要进行`n-i-1`
vb冒号排序法
以下是一个简单的VB示例,演示如何使用冒泡排序对整数数组进行排序:
vb
Copy code
Module Module1
Sub Main()
Dim arrayToSort() As Integer = {64, 34, 25, 12, 22, 11, 90}
Console.WriteLine("Original Array:")
PrintArray(arrayToSort)
BubbleSort(arrayToSort)
Console.WriteLine("Sorted Array:")
PrintArray(arrayToSort)
Console.ReadLine()
End Sub
Sub BubbleSort(ByRef arr() As Integer)
Dim n As Integer = arr.Length
Dim i, j As Integer
For i = 0 To n - 1
For j = 0 To n - i - 1
If arr(j) > arr(j + 1) Then
' Swap arr(j) and arr(j + 1)
Dim temp As Integer = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
End If
Next
Next
End Sub
Sub PrintArray(ByVal arr() As Integer)
Dim n As Integer = arr.Length
For i As Integer = 0 To n - 1
vb选择排序和冒泡排序的代码
vb选择排序和冒泡排序的代码
在计算机科学和程序设计语言中,选择排序和冒泡排序是两个最基本、最常用的排序算法。虽然它们不一定是最有效率的排序算法,但它们非常简单易懂,适合初学者使用和理解。下面我们将分步骤介绍VB选择排序和冒泡排序的代码。
VB选择排序:
步骤1:定义一个数组,用于存放需要排序的元素。
Dim arr(10) As Integer
步骤2:输入数据。
For i = 1 To 10
arr(i) = Val(InputBox("Please enter a number"))
Next
步骤3:定义一个选择排序的函数。
Sub selectionSort(ByVal arr As Variant)
Dim i As Integer
Dim j As Integer
Dim minIndex As Integer
Dim temp As Integer
For i = 1 To UBound(arr) - 1
minIndex = i
For j = i + 1 To UBound(arr)
If arr(j) < arr(minIndex) Then
minIndex = j
End If
Next
temp = arr(i)
arr(i) = arr(minIndex)
arr(minIndex) = temp
Next
End Sub
步骤4:调用选择排序函数。
selectionSort arr
步骤5:输出排序后的数据。
For i = 1 To 10
Print arr(i)
Next
VB冒泡排序:
步骤1:定义一个数组,用于存放需要排序的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB常考算法(八)排序:
1、算法
1)选择法排序
算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推…
下面我们以图形的形式体现对5个数进行选择排序的过程:
第一轮:第二轮:
第三轮:
从上图可以发现对5个元素进行排序,总共经过了5-1=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。
程序代码:
Private Sub Command1_Click()
Dim n As Integer
n = InputBox("请输入数组元素的个数:")
Dim a() As Integer, i As Integer, j As Integer
Print "排序前:"
ReDim a(n)
For i = 1 To n
a(i) = Int(Rnd * (99 - 10 + 1) + 10)
Print a(i);
最小值
次小值
Next i
For i = 1 To n - 1
For j = i To n
If a(i) > a(j) Then
temp = a(i) '交换元素
a(i) = a(j)
a(j) = temp
End If
Next j
Next i
Print "排序后:"
For i = 1 To n
Print a(i);
Next i
End Sub
2)冒泡法排序
算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组a 中存放n 个元素,第一轮,将a(1)和a(2)进行比较,若a(1)>a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n 个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n 个数中第二大的值;…;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。经过n-1轮比较处理,n 个数已经按从小到大的顺序排列好。
下面我们以图形的形式体现对5个数进行冒泡排序的过程:
第一轮:
第三轮:
第四轮:
最大值
程序代码:
Private Sub Command1_Click()
Dim n As Integer
n = InputBox("请输入数组元素的个数:")
Dim a() As Integer, i As Integer, j As Integer
Print "排序前:"
ReDim a(n)
For i = 1 To n
a(i) = Int(Rnd * (99 - 10 + 1) + 10)
Print a(i);
Next i
For i = 1 To n - 1
For j = 1 To n - i
If a(j) > a(j + 1) Then '相邻元素比较
temp = a(j)
a(j) = a(j + 1)
a(j + 1) = temp
End If
Next j
Next i
Print "排序后:"
For i = 1 To n
Print a(i);
Next i
End Sub
2、实战练习
1)填程序一
算法说明:C盘根目录下的数据文件data.txt中有两组数据,第一组数据未排序,并以-1表示该组数据结束;第二组数据按从小到大顺序排列。下面程序的功能是,单击“读入数据”按钮,将文件中的两组数据,分别读入到A、B数组中,单击“插入排序”按钮,则把A数组的元素按其大小依次插入到B数组的适当位置,使得B数组中元素仍为从小到大排列。完善程序,实现以上功能。
Dim a() As Integer, b() As Integer
Private Sub command1_click()
Dim I As Integer, j As Integer, n As Integer, s As String
(1) ‘参考答案:Open "c:\data.txt" For Input As #11
Do
Input #11, n
If n = -1 Then Exit Do
I = I + 1
ReDim Preserve a(I)
a(I) = n
s = s & Str(a(I))
Loop
Text1 = s
s = ""
(2) ‘参考答案:Do While Not EOF(1)
j = j + 1
ReDim Preserve b(j)
Input #11, b(j)
s = s & Str(b(j))
Loop
Text2 = s
Close 11
End Sub
Private Sub command2_click()
Dim I As Integer, j As Integer, s As String
For I = 1 To UBound(a)
If a(I) < b(1) Then
Call change(a(I), 1)
ElseIf a(I) > b(UBound(b)) Then
(3) ‘参考答案:ReDim Preserve b(UBound(b) + 1)
b(UBound(b)) = a(I)
Else
For j = 2 To bound(b)
If (a(I) > b(j - 1)) And a(I) <= b(j) Then Call change(a(I), j)
Next j
End If
Next I
For I = 1 To UBound(b)
s = s & Str(b(I))
Next I
Text3 = s
End Sub
Private Sub change(n As Integer, k As Integer)