VB选择法排序

以下代码是用选择法为随机产生的10个数字排序:
Private Sub Command1_Click()
Dim a(1 To 10) As Integer
For i = 1 To 10
a(i) = Int(Rnd * 10)
Print a(i);
Next i
Print

For i = 1 To 9
For j = i + 1 To 10
If a(i) > a(j) Then
t = a(i): a(i) = a(j): a(j) = t
End If
Next j
Print a(i);
Next i
Print a(i);

End Sub

书中写的是:(1)从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;
(2)除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;
(3)以此类推,最后构成递增序列。

请问这个过程中到底哪一步怎样实现的从n个数中选出最小数,有点不太明白,请帮忙解释下,谢谢!
举个例子麻烦大家解释下:
例如 5 3 2 7这四个数进行降序排列,那么两者比较如果后者小于前者则交换位置
一共进行三轮排序,第一轮中,首先3<5,二者交换位置,变成3 5 2 7,之后3和2相比,再交换位置,最后变成2537,这样思考正确吗?谢谢!还有为什么书上只说将最小数与第一个数交换位置,那样第一轮结束后不就应该是2 3 5 7了吗?

Private Sub Command1_Click()

Dim a(1 To 10) As Integer

For i = 1 To 10

a(i) = Int(Rnd * 10)

Print a(i);

Next i

Print

'以上十随机得出10个数

For i = 1 To 9 '这里开始是双重循环

For j = i + 1 To 10

If a(i) > a(j) Then '如果前一个数大于后一个数则交换位置

t = a(i): a(i) = a(j): a(j) = t

End If

Next j

Print a(i);

Next i

Print a(i);

End Sub

I等于1时 就是拿第一位和第二位比较 比较大的的数排后面 然后比较第一位和第三位 For j = i + 1 

To 10 直到比较到最后一位

i=2 时也是如此 循环9次就完成排序

5 3 2 7

i=1 时

J=2时 3 5 2 7

J=3时 2 5 3 7

j=4时 2 5 3 7

I=2时

j=3时 2 3 5 7


扩展资料

Private Sub Command1_Click()

Dim a(10) As Integer

Dim b As Integer

Dim i As Integer

Dim j As Integer

Dim k As Integer

For i = 1 To 10

a(i) = Int(Rnd * 90 + 10)

Print a(i);

Next i

Print

For i = 1 To 9

k = i

For j = k + 1 To 10

If a(j) < a(k) Then k = j

Next j

If a(i) > a(k) Then

b = a(i)

a(i) = a(k)

a(k) = b

End If

Next i

For i = 1 To 10

Print a(i);

Next i

Print

End Sub

参考资料:百度百科 - 选择法排序

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-04
Private Sub Command1_Click()
Dim a(1 To 10) As Integer
For i = 1 To 10
a(i) = Int(Rnd * 10)
Print a(i);
Next i
Print
'以上十随机得出10个数
For i = 1 To 9 '这里开始是双重循环
For j = i + 1 To 10
If a(i) > a(j) Then '如果前一个数大于后一个数则交换位置
t = a(i): a(i) = a(j): a(j) = t
End If
Next j
Print a(i);
Next i
Print a(i);

End Sub

I等于1时 就是拿第一位和第二位比较 比较大的的数排后面 然后比较第一位和第三位 For j = i + 1 To 10 直到比较到最后一位
i=2 时也是如此 循环9次就完成排序

5 3 2 7
i=1 时
J=2时 3 5 2 7
J=3时 2 5 3 7
j=4时 2 5 3 7
I=2时
j=3时 2 3 5 7本回答被提问者采纳
第2个回答  2013-04-02
假如对 5 3 2 7这四个数进行降序排列,总共需要3轮比较 即外循环的循环次数
第1轮比较:5与3比 不交换 ;5与2比 不交换; 5与7比 交换;数组变成 7 3 2 5
第2轮比较:3与2比 不交换; 3与5比 交换; 数组变成 7 5 3 2
第3轮比较:3与2比 不交换; 数组变成 7 5 3 2
第3个回答  2009-07-02
这叫冒泡算法
你自己按F8调试,用鼠标定位变量,查看每个变量的变化,比别人说更容易理解...

vb6.0用选择法对10个整数排列
通过选择排序算法,可以将数组a中的10个整数按照升序排列,实现从小到大排序。

vb选择法排序代码
print\\"排序前\\"msgbox\\"请输入第\\"&str(i)&\\"个数:\\"sngsq(i)=val(inputbox(\\"请输入\\"))'将输入的数据转换为数值型 printsngsq(i);

vb的排序问题
1、算法说明 1) 选择法排序 (1) 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;(2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;(3) 以此类推,最后构成递增序列。譬如:8 6 9 3 2 7 第一轮交换后 2 6 9 3 8 7 ...

VB中比较交换法排序与选择法排序有什么区别
选择法排序是每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。

VB冒泡排序法和选择排序法的优缺点比较
选择排序,则在比较过程中(内循环里面)并不进行对调,而是先记录下最小(大)数的下标,在一次扫描完成后再进行对调。所以它的效率会比冒泡的高一点。但是冒泡排序是“稳定的”排序。就是说同样总分的若干名同学,排序前在前面的,排序后这些同学的相互位置不会发生改变。而选择排序则是“不稳定的”...

VB选择法的问题
a:0,b:2 i:20134 a:0,b:3 i:30124 a:0,b:4 i:40123 a:1,b:2 i:41023 a:1,b:3 i:42013 a:1,b:4 i:43012 a:2,b:3 i:43102 a:2,b:4 i:43201 a:3,b:4 i:43210 错误的步骤:b=0 to 4 a:0,b:1 i:10234 a:0,b:2 i:20134 a:0,b:3 ...

VB选择法排序
End SubI等于1时 就是拿第一位和第二位比较 比较大的的数排后面 然后比较第一位和第三位 For j = i + 1 To 10 直到比较到最后一位 i=2 时也是如此 循环9次就完成排序5 3 2 7 i=1 时 J=2时 3 5 2 7 J=3时 2 5 3 7 j=4时 2 5 3 7 I=2时 j=3时 2 3 5 7 ...

求选择法vb程序;急
Public Sub Swap(a, b)'交换 Dim t t = a: a = b: b = t End Sub Public Sub SelectSort(a(), ByVal Left As Integer, ByVal Right As Integer)'选择排序 '基本思想是:每次选出第i小的记录,放在第i个位置。'i的起点是Left。当i=Right-1时就排完了。Dim i As Integer, j ...

简单的VB选择法排序题,急求答案!
你可以用这样的算法:把十个数编进一个数组,然后判断数组内相邻两元素之间的大小,若前一个数大于后一个数,则不做改变;若反之,则交换两个元素的值。具体代码我就不写了吧,手机上不好打代码。反正我遇到这种东西习惯用For...next语句。

VB选择法排序演示(代码太多略复杂),我这代码哪里错了,为什么
但是选择排序的核心是:将从i到末尾的最小(大)值与第i个值交换,核心是找最小(大)值所在序号p,按你的思路,一定要有关键语句:p等于i: if a(p)大于等于a(j) then p等于j,但是我找多遍都没找到,你是否在这方面多考虑一下?对不起,许多字符输入不上,只好用汉字代替,明白即可。...

相似回答