qingliangyou的博客

VB程序设计的常用算法

分类:默认分类  人气:447  评论:0  时间:2012-04-02 01:59

五、排序问题

1.选择法排序(升序)

基本思想:

1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置;

2)除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置;

3)依次类推,选择了n-1次后,这个数列已按升序排列。

程序代码如下:

For i = 1 To n - 1

imin = i

For j = i + 1 To n

If a(imin) > a(j) Then imin = j

Next j

temp = a(i)

a(i) = a(imin)

a(imin) = temp

Next I

2.冒泡法排序(升序)

基本思想:(将相邻两个数比较,小的调到前头)

1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;

2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;

3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。

程序段如下

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

3.合并法排序(将两个有序数组AB合并成另一个有序的数组C,升序)

基本思想:

1)先在AB数组中各取第一个元素进行比较,将小的元素放入C数组;

2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完;

3)将另一个数组剩余元素抄入C数组,合并排序完成。

程序段如下:

Do While ia <= UBound(A) And ib <= UBound(B) 'AB数组均未比较完

If A(ia) < B(ib) Then

C(ic) = A(ia) ia = ia + 1

Else

C(ic) = B(ib) ib = ib + 1

End If

ic = ic + 1

Loop

Do While ia <= UBound(A) 'A数组中的剩余元素抄入C数组

C(ic) = A(ia)

ia = ia + 1 ic = ic + 1

Loop

Do While ib <= UBound(B) 'B数组中的剩余元素抄入C数组

C(ic) = B(ib)

ib = ib + 1 ic = ic + 1

Loop

评论(0)
暂无评论
我来评论
(800字以内)
博客分类
最新阅读用户
暂无用户