windows nt4.0安装:请教一个简单的VB编程题...

来源:百度文库 编辑:高考问答 时间:2024/04/29 13:26:57
就是10个数字排序的问题

随便输入10个数字,然后按从小到大的顺序排好
用代码实现..

我是个初学的
用繁琐的代码也可以......

Option Explicit'自定义排序函数
Function Paixu(shuzu(), shuzu0(), Max As Integer, shunxu As Boolean)
Dim c
Dim b, d, f, l, h As Integer
'临时数组,如果排序的数组维数大于1000请将下面定义的维数相应扩大
Dim n(1000), k(1000) As Double
c = shuzu(1)
For f = 1 To Max:For b = f To Max
If shuzu(b) <= c Then l = b: c = shuzu(l): Exit For
Next:Next
For h = 1 To Max
c = shuzu(l)
For f = 1 To Max:For b = f To Max
If k(b) = 0 Then If shuzu(b) >= c Then d = b: c = shuzu(d): Exit For
Next:Next
n(h) = d: k(d) = 1: d = 0
Next
For h = 1 To Max '将原数组元素按递增顺序写入
If shunxu = False Then shuzu0(h) = shuzu(n(h)) Else shuzu0(Max + 1 - h) = shuzu(n(h))
Next
End Function

Function Bubble_Order(num_List,isAsc)
Dim arrTemp,iCount,i,j,iValue,outValue
arrTemp = split(num_List,",")
iCount = UBound(arrTemp)
If isAsc Then
For i=0 To iCount
For j = iCount - 1 To i Step -1
If j + 1 <= UBound(arrTemp) Then
If int(arrTemp(j)) < int(arrTemp(j + 1)) Then
iValue = arrTemp(j)
arrTemp(j) = arrTemp(j + 1)
arrTemp(j + 1) = iValue
End If
End If
Next
Next
Else
For i=0 To iCount
For j = iCount - 1 To i Step -1
If j + 1 <= UBound(arrTemp) Then
If int(arrTemp(j)) > int(arrTemp(j + 1)) Then
iValue = arrTemp(j)
arrTemp(j) = arrTemp(j + 1)
arrTemp(j + 1) = iValue
End If
End If
Next
Next
End If

For i=0 to Ubound(arrTemp)
If i = Ubound(arrTemp) Then
outValue = outValue & arrTemp(i)
Else
If isAsc Then
outValue = outValue & arrTemp(i) & " > "
Else
outValue = outValue & arrTemp(i) & " < "
End If
End If
Next
Bubble_Order = outValue
End Function

str = "354,345,35,76,782,83,8,2,92,439,46,289,1"
MsgBox("354,345,35,76,782,83,8,2,92,439,46,289,1")
MsgBox(vbClRf & "冒泡排序(VB编写,完全兼容VbScript)实现:")
MsgBox(vbClRf & "升序排列(默认): " + Bubble_Order(str,false))
MsgBox(vbClRf & "降序排列: " + Bubble_Order(str,true))

备注:
对于n个待排序成员,冒泡排序需要进行n(n-1)/2次比较,平均情况下需进行3n(n-1)/4次交换;
因为每交换一对不合顺序的元素,需进行三次操作,所以最坏情况下,交换次数是比较次数的三倍,即3n(n-1)/2。
因此,冒泡法是效率最差的排序方法,一般只适合于数组较小的情况。

VB不清楚
我知道Javascript中的数组可以非常方便的实现排序,代码如下:

//该函数把20提到第一位,其他顺序排列
function Test3(a,b)
{
if (a == 20)
return -1;
else if (b == 20)
return 1;
else
return a-b;
//return b-a;
}
//倒序排列
function Test2(a,b)
{
return b-a;
}
//顺序排列
function Test1(a,b)
{
return a-b;
}
function SortFunction()
{
var arr = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
arr.sort(Test1);
alert("顺序排列! 函数:Test1(), 结果如下:\n\n"+arr.toString()+"\n\n原始为:\n\n1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20");
arr.sort(Test2);
alert("倒序排列! 函数:Test2(), 结果如下:\n\n"+arr.toString()+"\n\n原始为:\n\n1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20");
arr.sort(Test3);
alert("把20提到第一位,其他顺序排列! 函数Test3(), 结果如下:\n\n"+arr.toString()+"\n\n原始为:\n\n1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20");
}

你可以多试一下,看VB中有没有同样的办法.

太麻烦了把我以前学的好像没那么麻烦啊 !

常用的排序方法有冒泡排序法和选择排序法,你要哪种?