当前位置:编程学习 > VB >>

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 Integer

Dim 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中较为常用
Next

For i = 1 To 10
flag = 0
For j = i + 1 To 10

If 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之间)时,速度非常快当数据数值较大时,速度较慢
需额外的内存
只能对整数类型的数据排序
  • 如果你的数据列表中有99%数据已排过序,则用汽泡排序法。
  • 如果你要排序的数据较少(100个以下),则用选择排序法。
  • 如果你的数据都是整数,并且数值不大(几千以内),则用计数排序法。
  • 否则的话用快速排序法法

上一个:VB语言 是什么?
下一个:VB问题啊!急

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,