关键词不能为空

当前您在: 主页 > 英语 >

(完整版)VB常用算法——排序

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 09:39
tags:

-

2021年2月28日发(作者:suprise)


VB


常考算法(八)排序:



1


、算法



1


)选择法排序


算法说明:


根据上例中求最小值的思路,


我们可以使用如下 方法进行从小到大排序:



一轮,


以第 一个元素逐个跟后面的所有元素比较,


如果比后面的元素大就进行交换,


经过一


轮比较,


第一个元素被确定为最小;

< p>
同样的方法,


下一轮以第二个元素跟剩下的所有元素进

行比较确定下次小的元素;以此类推…



下面我们以图形的 形式体现对


5


个数进行选择排序的过程:



第一轮:



1


1


6


2


2


最小值





6


6


2


6


6



4


4


4


4


4



2


2


1


1


1



5


5


5


5


5



第二轮:










1


1


1


1



2


6


4


2



次小值



6


4


6


6



4


2


2


4



5


5


5


5



第三轮:











第四轮:




1


1


1


1


1



2


2


2


2


2



4


4


6


4


4



6


5


4


6


6



5


6


5


5


5



从上图可以发现对


5


个元素进行排序,


总共经过了

5-1=4


轮,


而每一轮中比较的次数也

< br>不相同,第一轮


2



3



4



5


号元素参与跟


1


号元素的比较,共

< br>4


次,第二轮


3



4



5


号元


素参与跟


2


号元素的比较,共


3


次,以次类推,比较次数逐步减少。经过四轮的比较,利用


逐 步求最小值的方法将


5


个数从小到大排好序。

< br>对于这样一个排序的过程,


我们可以使用两


个循环分别控 制比较的轮数和每一轮的次数。



程序代码:



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)


,则交 换这两个元素


的值,


以此类推,


直到< /p>


a(n-1)



a(n)


进行比较处理后,


a(n)


中就存放了


n


个数中最大的值;


第二轮,用


a(1)



a(2),a(2)


与< /p>


a(3),



,a(n-2)

< p>


a(n-1)


进行比较,处理方法相同,这一< /p>


轮下来,


a(n-1)


中存放

< p>
n


个数中第二大的值;…;第


n-1


轮,


a(1)



a(2)< /p>


进行比较处理,


确保最小值在


a(1)< /p>


中。经过


n-1


轮比较处理,

< p>
n


个数已经按从小到大的顺序排列好。



下面我们以图形的形式体现对


5


个数进行冒泡排 序的过程:



第一轮:




2


2


6


2


2



4


4


2


6


4



1


1


4


4


6



6


5


最大值



1


1


1



第二轮:



5


6


5


5


5



2


2


2


2



4


4


1


1



1


1


4


4



5


5


5


5



6


6


6


6





第三轮:











第四轮:




1


1


1


1


2



2


2


2


2


1



4


4


4


4


4



5


5


5


5


5



6


6


6


6


6



程序代码:



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


盘根目录下的数据文件



中有两组数据,第一组数据未排


序,


并 以


-1


表示该组数据结束;


第二组数据 按从小到大顺序排列。


下面程序的功


能是,

单击


“读入数据”


按钮,


将文件中 的两组数据,


分别读入到


A



B


数组中,


单击“插入排序”按钮,则把


A


数组的元素按其大小依次插入到


B


数组的适当


位置,使得


B


数组中元素仍为从小到大排列。完善程序,实现以上功能。



-


-


-


-


-


-


-


-



本文更新与2021-02-28 09:39,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/680081.html

(完整版)VB常用算法——排序的相关文章