VB常用的算法——排序

合集下载

计算机考试二级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常用算法

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程序开发中,常常需要使用各种算法来处理数据和解决问题。下面将介绍几种常用的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常用算法总结大全

VB(Visual Basic)是一种对初学者友好的编程语言,因其简单易学的特点而受到很多人的喜爱。在VB中,算法是编程过程中非常重要的一部分,它们用来解决各种问题,从简单的数学计算到复杂的数据处理。本文将总结一些常用的算法,帮助VB程序员更好地应用于实际项目中。

一、排序算法

1.冒泡排序

冒泡排序是一种简单的排序算法,它通过不断地交换相邻的元素来对数据进行排序。它的基本思想是从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序不正确,则交换它们的位置。重复这个过程,直到整个列表都已经排序。

2.快速排序

快速排序是一种高效的排序算法,它通过选择一个基准元素,将列表分为两部分,一部分小于基准元素,一部分大于基准元素。然后对这两部分分别进行快速排序,最后将它们合并在一起。

3.插入排序

插入排序是一种简单直观的排序算法,它将列表分为已排序和未排序两部分,每次选择未排序部分的第一个元素,并插入到已排序部分的适当位置。重复这个过程,直到整个列表都已经排序。

二、查找算法

1.顺序查找

顺序查找是一种简单的查找算法,它从列表的第一个元素开始,依次比较每个元素,直到找到目标元素或者遍历完整个列表。

2.二分查找

二分查找是一种高效的查找算法,它要求列表已经排序。它通过比较目标元素与列表中间元素的大小关系来确定要的部分,并缩小范围。重复这个过程,直到找到目标元素或者确定列表中没有目标元素。

三、图算法

1.深度优先(DFS)

深度优先是一种用于图遍历的算法,它从一个起始点开始,沿着一个路径尽可能深地访问节点,直到遇到一个没有未访问过的相邻节点为止。然后回溯到前一个节点,寻找其他路径。

vb排列递归,要求输入随机n个数,输出m个数的组合

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常用算法总结

在VB(Visual Basic)编程中,常用的算法有很多。下面将对其中

一些常见和重要的算法进行总结。请注意,由于篇幅限制,这只是一个简

要总结,无法涵盖所有算法的细节。

1.排序算法:

排序算法是计算机科学中最基本和常见的算法之一、在VB中,常用

的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。排序算法通过比较和交换来对一组数据进行重新排列,使其按照指定的顺

序排列。

2.查找算法:

查找算法用于在一个数据集中寻找特定的值或元素。在VB中,常用

的查找算法有二分查找和线性查找等。二分查找是一种高效的算法,可以

在有序数组中快速地找到目标元素。

3.图算法:

图算法是用于解决与图相关的问题的算法。在VB中,常用的图算法

包括广度优先(BFS)和深度优先(DFS)等。这些算法可以用于寻找图中

的路径、检测环和遍历图等操作。

4.动态规划:

动态规划是一种用于解决最优化问题的算法。在VB中,常用的动态

规划算法有背包问题、最长公共子序列和最短路径等。动态规划算法通过

拆解问题为子问题,并保存子问题的解来避免重复计算,从而提高算法的

效率。

5.字符串匹配:

字符串匹配算法用于在一个字符串中查找另一个字符串。在VB中,

常用的字符串匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。这些算法通过比较字符来确定字符串的匹配位置。

6.线性代数:

线性代数是数学的一个分支,用于解决线性方程组和向量空间等问题。在VB中,常用的线性代数算法有矩阵运算、向量运算和线性方程求解等。这些算法可以应用于计算机图形学、数据分析和机器学习等领域。

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常用算法总结

VB是一种基于Visual Basic语言的编程语言,广泛应用于Windows 操作系统环境下的软件开发。在VB中,算法的选择和使用对于解决问题是至关重要的。本文将对VB常用算法进行总结,希望能给读者提供一些编程的指导和参考。

一、排序算法

排序算法是一类重要的算法,用于将一组无序的数据按照一定的规则进行排序。VB中常用的排序算法有冒泡排序、选择排序、插入排序、快速排序等。

1.冒泡排序:从序列的第一个元素开始,依次比较相邻的两个元素,如果它们的顺序错误则交换位置,直到序列被完全排序。

2.选择排序:依次选择未排序序列中的最小元素,将其放到已排序序列的末尾。

3.插入排序:将一个记录插入到已排序好的序列中,从而得到一个新的、记录数增1的有序序列。

4.快速排序:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,然后分别对这两部分记录继续进行排序,直到整个序列有序。

二、查找算法

查找算法用于在一组有序或无序的数据中寻找指定的元素。VB中常用的查找算法有线性查找、二分查找、哈希查找等。

1.线性查找:从数据的开头开始,逐个比较每一个元素,直到找到目

标元素。

2.二分查找:在有序序列中,每次将待查元素与中间位置的元素比较,如果相等则找到,否则将待查元素与中间位置的元素比较,直到找到目标

元素或序列为空。

3.哈希查找:通过哈希函数将关键字映射到一个定长的数组上,当需

要查找时,根据关键字计算出哈希地址,从数组中访问对应位置的元素。三、图算法

图算法主要用于解决图结构相关的问题,如最短路径、拓扑排序等。VB中常用的图算法有深度优先、广度优先、Dijkstra算法等。

vb数组排序

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常用算法——排序

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常用算法总结大全

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常用算法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常见算法

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编写冒泡排序算法。

在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示例,演示如何使用冒泡排序对整数数组进行排序:

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选择排序和冒泡排序的代码。

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

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

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)

相关文档
最新文档