vb有多少排序法?
有多少说多少吧,测试一下
补充:能列举一下吗?比如,气泡,顺序,选择……,有例子更好
追问:外国的的确不错,不过看不懂了,抱歉
有多少说多少吧,测试一下
补充:能列举一下吗?比如,气泡,顺序,选择……,有例子更好
追问:外国的的确不错,不过看不懂了,抱歉
答案:交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。
冒泡排序
1、排序方法
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从
下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。2、分析
因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于
等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。
若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。(1)算法的最好时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:
C min =n-1
M min =0。
冒泡排序最好的时间复杂度为O(n)。
(2)算法的最坏时间复杂度
若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次
来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
C max =n(n-1)/2=O(n 2 )
M max =3n(n-1)/2=O(n 2 )
冒泡排序的最坏时间复杂度为O(n 2 )。
(3)算法的平均时间复杂度为O(n 2 )
虽然冒泡排序不一定要进行n-1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多。
(4)算法稳定性
冒泡排序是就地排序,且它是稳定的。3、算法改进
可以设置交换标记,某次扫描后,未进行交换,则应终止扫描,因待排序区域为有序区,且为正序区。
同时,可以记录最后一次交换的位置等等,大家可以深入分析。
以下给出小Y写的VB和VBA代码
Private Sub bubblesort()
Dim num(1 To 10) As Integer
Dim i As IntegerDim j As Integer
Dim t As Integer‘用来做两个数组单元的值交换暂存
Dim k As Integer’定义来记录交换次数
Dim flag As Integer'可以根据个人习惯,是否定义为布尔型For i = 1 To 10
num(i) = Int((100 - 0 + 1) * Rnd + 0)‘该表达式为产生100以内随机整数公式,在VB和VBA中较为常用
NextFor i = 1 To 10
flag = 0
For j = i + 1 To 10If num(i) > num(j) Then
k = k + 1
t = num(i)
num(i) = num(j)
num(j) = t
flag = 1
End If
Next
If flag = 0 Then Exit For’如果不对某次扫描后是否未进行交换进行判断,则扫描次数为固定值:N*(N-1)/2
Next
MsgBox k
End Sub附:第一次扫描结果图(部分)
http://en.易做图.org/wiki/Sorting_algorithm#Comparison_of_algorithms
该有的都有,比较也很全面
算法 | 优点 | 缺点 |
---|---|---|
冒泡排序法 | 对以初步排序的数据来说这种方法的速度很快 | 在其它情况下运行速度较慢 |
选择排序法 | 非常简单 | 对大量数据的排序速度很慢 |
容易明白 | ||
对于少量数据的排序来说速度很快 | ||
快速排序法 | 对大量数据的排序来说速度很快 | 如果有大量重复的数据就比较麻烦 |
计数排序法 | 当数据数值较小(1-1000之间)时,速度非常快 | 当数据数值较大时,速度较慢 |
需额外的内存 | ||
只能对整数类型的数据排序 |