关于vb编程..高手近..排序

作者&投稿:佘桦 (若有异议请与网页底部的电邮联系)
VB高手解释选择排序排序~

选择排序的过程:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。
冒泡排序的过程:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
你给出的代码属于选择排序,For i=1 to 9是因为数组a只包含10个元素,按选择排序的要求,需要将数组前9个元素分别与后面的元素(从i+1起,直到10为止)比较大小;p=i的作用为把a(i)视为最小元素,记录a(i)的数组下标;p=j的作用为当a(j)比a(p)小时,记录a(j)的数组下标,p=j记录的是每一轮选择排序过程的最小值的数组下标。
选择排序和冒泡排序的排序过程对比(从小到大):
选择排序(10个元素)----------- 冒泡排序(10个元素)
For i = 1 To 9 ------------------ For i = 9 To 1 Step -1
p = i
For j = i + 1 To 10 ------------- For j = 1 To i
If a(p) > a(j) Then p = j ------- If a(j) > a(j+1) Then 'j=i时,a(j+1)为每一轮的最大值
------------------------------------- temp = a(j + 1)
------------------------------------- a(j + 1) = a(j)
------------------------------------- a(j) = temp
------------------------------------ End If
Next j -------------------------- Next j
temp = a(i)
a(i) = a(j)
a(j) = temp
Next i -------------------------- Next i

‘试一下
Private Sub Command1_Click()
Dim i As Long, j As Long, n As Long, b(), k As Long, t
Me.WindowState = vbMaximized
n = 100
For i = 2 To n
For j = 2 To Int(Sqr(i))
If i Mod j = 0 Then Exit For
Next
If j = Int(Sqr(i)) + 1 Then
k = k + 1
ReDim Preserve b(1 To k)
b(k) = i
End If
Next
Print Join(b, ",")
For i = 1 To UBound(b) - 1
For j = i + 1 To UBound(b)
If b(i) < b(j) Then
t = b(i): b(i) = b(j): b(j) = t
End If
Next
Next
Print Join(b, ",")
End Sub

'需要在窗体上添加一个Command控件,Caption为“排序”,再添加两个PictureBox控件,宽度较大一点,以免显示不全。代码如下:

Private Type Stuinfo
sort As Integer
name As String
num As String
score As Integer
End Type

Dim stu(1 To 10) As Stuinfo
Dim k As Integer

Private Sub Command1_Click()
For i = 1 To k - 1
For j = 1 To k - i
If stu(j).score < stu(j + 1).score Then
a = stu(j).name: b = stu(j).num: c = stu(j).score
stu(j).name = stu(j + 1).name: stu(j).num = stu(j + 1).num: stu(j).score = stu(j + 1).score
stu(j + 1).name = a: stu(j + 1).num = b: stu(j + 1).score = c
End If
Next
Next

Picture2.Cls
Picture2.Print "名次", "姓名", "学号", "成绩"
For i = 1 To k
With stu(i)
Picture2.Print .sort, .name, .num, .score
End With
Next
End Sub

Private Sub Form_Activate()
Picture1.AutoRedraw = True
Picture2.AutoRedraw = True

k = 10 '学生数
For i = 1 To k
With stu(i)
.sort = i
.name = Trim(InputBox("第" & i & "位学生的姓名:"))
.num = Trim(InputBox("第" & i & "位学生的学号:"))
.score = Val(Trim(InputBox("第" & i & "位学生的成绩:")))
End With
Next

Picture1.Cls
Picture1.Print "序号", "姓名", "学号", "成绩"
For i = 1 To k
With stu(i)
Picture1.Print .sort, .name, .num, .score
End With
Next

End Sub

学生定义为多维数组,然后以成绩冒泡排序一下就好...我旧blog有代码...

你能说仔细点吗


请vb高手帮忙。若大鸭子5元1只,中鸭子3元一只,小鸭子1元3只。
Sub abx()For i = 1 To 20 For j = 1 To 35 For k = 1 To 100 If 5 * i + 3 * j + k = 100 Then Debug.Print i & ":" & j & ":" & k * 3 End If Next Next Next End Sub

vb程序设计题,请高手解答
Vb编程实现两个有序数组的合并,即二路归并 数组A和数组B分别记录有一些数据,这两个数组上的数据都已经由小到大按顺序排列好。请用vb编写一个程序把这此数据合并到同一个数组之中,并使得合并后的数据全部按由小到大排列。这就是所谓的“二路归并”。在编写这个程序时先进行说明一下,首先,大量...

求高手指点vb编程 以下程序的运行结果是 private sub command1_click...
Private Sub command1_click()For i = 1 To 10 GetValue iNext iPrint GetValue(i)End SubPrivate Function GetValue(ByVal a As Integer)Static s As Integers = s + aGetValue = sEnd Function'因为s是静态变量,所以每次执行完后s的值会保留'当i=1 时,调用 GetValue i ,s的值...

反渐开线函数编程(VB高手进)
?AInv (0.02842)24.5822867713287 Public Function Inv(a As Double) As Double Inv = Tan(a) - a End Function Public Function AInv(num As Double) As Double Dim lowangle As Double Dim highangle As Double Dim midangle As Double lowangle = 0 highangle = Atn(1) * 2 Do ...

VB编程高手进
回答:设置系统时间: TimeOfDay = #1:20:00 AM# 或 TimeString = "1:20:00" 设置系统日期: Today = #5\/26\/2007# 或 DateString = "2007-5-26"

高手解答:VB编程求两个素数和为100,急急急
素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。100以内的质数(素数):2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71...

有VB高手吗?
是VB编程吧。你要考二级VB吧,我也是啊。最经典我觉得是:option explicit private sub form1_click text1.text = ""if ch1.value = 1 then text1.text = "英语班"end if if ch2.value then if text1.text <> "" then text1.text = text.text + "和"text1.text = text1.text +...

学多长时间能成为vb高手?
学不出高手的 只有找项目,或者自己设想后去做项目,才能成为高手,而且是有针对性的 比如,开发游戏,图形处理,3D,视频,系统应用...总之高手是有针对的,而高手本身的限制不在于编程的语言,而是对相应内容的了解,比如要做图形,就要了解图形的原理,压缩的原理...,而不是VB了解了就能作图了 ...

急求高手解答用VB编程“求1-100之间可以被5或7整除的数之和。”不胜感...
Private Sub Command1_Click()For i = i To 100 If i Mod 5 = 0 Or i Mod 7 = 0 Then s = s + i End If Next i Print "能被5或都7整除的数之和为" & s End Sub

VB编程高手进 急~~~
这需要用的windows的dc VB 截图 抓图 Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function EmptyClipboard Lib "user32" () As Long...

汝州市18996036296: VB中的字母+数字的排序问题,高手请看过来!!!
禽追氨茶: 先将表内数据做一个替换,使用统一长度的字符串,方法是:按你的截图看,字符串长度应为4,所以对ZKBH字段进行计算,长度小于4的,插入“0”补为4位. 以下是VB+ACCESS调用数据库的代码: Adodc1.ConnectionString = cn Adodc1....

汝州市18996036296: 请教VB编程高手,请帮忙,100个数中随机输出5个数,并排序,分出奇偶 -
禽追氨茶: 先抽出五个数,然后在对五个数进行奇偶检查,可以使用BMOD2==0来检验,可以使用起泡法来进行排序

汝州市18996036296: 求VB编程高手:使用inputbox输入10个数、并且对其中的素数进行排序输出
禽追氨茶: 这个貌似昨天前天在百度贴吧上回答过~~~~ 需要两个按钮三个输入框 Private Function su(n%) As Boolean Dim j% su = True For j = 2 To Sqr(n) If n Mod j = 0 Then su = False Exit For End If Next j End Function 按钮1的代码: On Error Resume ...

汝州市18996036296: VB里的冒泡法怎么编程序请高手帮忙谢谢了!!
禽追氨茶: Private Sub Command1_Click() '以十个整数由小到大进行排序为例,说明冒泡法biancheng Dim a(1 To 10) As Integer Dim i As Integer, j As Integer, t As Integer For i = 1 To 10 a(i) = Val(InputBox("请输入十个整数")) Next i For i = 1 To 9 For j ...

汝州市18996036296: VB编程的问题,高手请进 -
禽追氨茶: Option Explicit Private Sub Command1_Click() Dim i As Integer For i = 0 To List1.ListCount - 1 '判断是否是闰年 If Val(List1.List(i)) Mod 4 = 0 And Val(List1.List(i)) Mod 100 <> 0 Or Val(List1.List(i)) Mod 4 = 0 And Val(List1.List(i)) Mod 400 = 0 Then ...

汝州市18996036296: 急!!关于编程vb语言:遇到一个不会做的求高手帮忙 -
禽追氨茶: Private Sub Command1_Click() Dim a() As double, n As double Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeOf Ctrl Is TextBox Then ReDim Preserve a(1, n) As double a(0, n) = Val(Ctrl.Text) a(1, n) = Val(Replace(Ctrl.Name, "Text", "...

汝州市18996036296: 怎么用vb2005程序将一组数倒序排列,具体编程是什么?谢谢高手!要快啊! 请放我邮箱上lishun1991@163.com -
禽追氨茶: 告诉你思想吧:创建一个局部变量dim a as integer 将a=b[0]; 一个循环将b[i]=b[i+1] 最后一个b[max]=a 就行了

汝州市18996036296: 初入编程,编程排序?
禽追氨茶: 从小到大...个人意见 易语言<VB<Delphi<C语言<C#<C++=JAVA(注意,C++和JAVA个人感觉难度差不多) 还有一个Python,是一个脚本语言,也就是不适合编写窗口程序,而且不能独立运行(需要安装Python才能运行他写的程序)

汝州市18996036296: 求VB高手解答代码
禽追氨茶: 1、 For i = 1 To 9 For j = 1 To i Print j; "*"; i; "="; i * j; Next Print Next 2、 For i = 3 To 100 For j = 2 To Int(Sqr(i)) If i Mod j = 0 Then Exit For Next If j > Int(Sqr(i)) Then Print i Next 3、 Dim a(1 To 10) As Integer Randomize Timer Max = a(1) For i = ...

汝州市18996036296: 如何速成VB高手?
禽追氨茶: VB和英文的关系不是很密切,只需要记住一些常用的命令像 if while do 之类的你总知道吧,学好VB的关键还是在与多多练习,希望你早日学成 VB,出来这么多年了,要是有速成的办法也早被普遍应用了.学程序最快的方法就是吃苦,多编些代...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网