vb的排序问题

Sub jixuan()
Dim i As Integer, t As Integer
For i = 1 To jg - 1
For t = i + 1 To jg
If j(i) > j(t) Then
z = j(i)
j(i) = j(t)
j(t) = z
End If
Next t
Next i

For i = 1 To jg
Picture1.Print j(i);
If i Mod 10 = 0 Then Picture1.Print
Next i
End Sub

最后出来的数都是0 ,只有最后一个是其他数
问题出在哪里?
Sub oumao()
Dim tm As Integer, i As Integer
For i = 1 To og - 1
For tm = 1 To og - i
If o(tm) > o(tm + 1) Then
z = o(tm)
o(tm) = o(tm + 1)
o(tm + 1) = z
End If
Next tm
Next i
For i = 1 To og
Label1.Caption = Label1.Caption & o(i) & " "
If o(og) Mod 10 = 0 Then
Label1.Caption = Label1.Caption & vbCrLf
End If
Next i

End Sub
这个排序出现和上面一样的情况

1、算法说明

  1) 选择法排序

  (1) 从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;

  (2) 除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;

  (3) 以此类推,最后构成递增序列。

  譬如:

  8 6 9 3 2 7

  第一轮交换后 2 6 9 3 8 7

  第二轮交换后 2 3 9 6 8 7

  第三轮交换后 2 3 6 9 8 7

  第四轮交换后 2 3 6 7 8 9

  第五轮无交换 2 3 6 7 8 9

  程序代码如下:

以下是引用片段:
  Private Sub xzPaiXu(a() As Double, sheng As Boolean)
  'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。
  Dim i As Integer, j As Integer
  Dim temp As Double
  Dim m As Integer
  For i = LBound(a) To UBound(a) - 1 '进行数组大小-1轮比较
  m = i '在第i轮比较时,假定第
  'i个元素为最值元素
  For j = i + 1 To UBound(a) '在剩下的元素中找出最
  '值元素的下标并记录在m中
  If sheng Then '若为升序,则m记录最小元素
  '下标,否则记录最大元素下标
  If a(j) < a(m) Then m = j
  Else
  If a(j) > a(m) Then m = j
  End If
  Next j '将最值元素与第i个元素交换
  temp = a(i)
  a(i) = a(m)
  a(m) = temp
  Next i
  End Sub
  调用该过程示例:
  Option Base 1
  Private Sub Command1_Click()
  Dim b(6) As Double
  b(1) = 8
  b(2) = 6
  b(3) = 9
  b(4) = 3
  b(5) = 2
  b(6) = 7
  Call xzPaiXu(b, True)
  For i% = 1 To 6
  Print b(i)
  Next
  End Sub

  2) 冒泡法排序

  选择排序法在每一轮排序时找最值元素的下标,出了内循环(一轮排序结束),再交换最小数的位置;而冒泡法在每一轮排序时将相邻的数比较,当次序不对就交换位置,出了内循环,最值数已经冒出。

  譬如:

  8 6 9 3 2 7

  8 6 9 3 2 7

  8 6 9 2 3 7

  8 6 2 9 3 7

  8 2 6 9 3 7

  2 8 6 9 3 7

  ….

  2 3 8 6 9 7

  ….

  2 3 6 8 7 9

  ….

  2 3 6 7 8 9

  ….

  2 3 6 7 8 9

  程序代码如下:

以下是引用片段:
  Private Sub mpPaiXu(a() As Double, sheng As Boolean)
  'a为需要排序的数组,sheng为True则为升序排列,为False,则为降序排列。
  Dim i As Integer, j As Integer
  Dim temp As Double
  Dim m As Integer
  For i = LBound(a) To UBound(a) - 1 '进行n-1轮比较
  For j = UBound(a) To i + 1 Step -1 '从n到i个元素两两进行比较
  If sheng Then '若次序不对,马上进行交换
  If a(j) < a(j - 1) Then
  temp = a(j)
  a(j) = a(j - 1)
  a(j - 1) = temp
  End If
  Else
  If a(j) > a(j - 1) Then
  temp = a(j)
  a(j) = a(j - 1)
  a(j - 1) = temp
  End If
  End If
  Next j '出了内循环,一轮排序结束
  '最值元素冒到最上边
  Next i
  End Sub
  调用该过程代码基本同上。
  2、实战练习

  1) 补充代码

  下面是一个采用拉锯式排序法对数组元素按升序进行排序的程序,所谓“拉锯式排序法”是这一遍把最小的元素从下到上送到最上的位置,下一遍则是从上到下把最大的元素送到最下的位置。

以下是引用片段:
  Option Base 1
  Private Sub Command1_Click()
  Dim a(10) As Integer,i As Integer
  For i = 1 To 10
  a(i) = Int(Rnd * 10)+1
  Text1 = Text1 & Str(a(i))
  Next i
  Call shaker_sort(a)
  For i = 1 To 10
  Text2 = Text2 & Str(a(i))
  Next i
  End Sub
  Private Sub Shaker_sort(k() As Integer)
  Dim i As Integer,c As Integer,d As Integer
  Dim t As Integer
  c = 1
  d = (1)
  Do
  For  (2) Step-1
  If k(i=1)>k(i) Then
  t = k(i-1):k(i-1) = k(i):k(i) = t
  End If
  Next i
  (3)
  For i = c+1 To d
  If (4) Then
  t = k(i-1):k(i-1) = k(i):k(i) = t
  End If
  Next i
  d = d-1
  Loop While  (5)
  End Sub

  2) 编程题

  把文本框输入的字符串按降序添加到列表框中。

  
是否可以解决您的问题?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-25
看出来了,你这是用冒泡排序法进行排序,完全看不懂你的代码:我给你重新做一个吧:
Private Sub Command1_Click()
Dim a(10) As Integer, i As Integer, j As Integer
For i = 1 To 10
a(i) = Int(Rnd * 101)
Next i
For i = 1 To 10
Print a(i);
Next i
Print
For i = 1 To 9
For j = 10 To i + 1 Step -1
If a(j) < a(j - 1) Then
t = a(j)
a(j) = a(j - 1)
a(j - 1) = t
End If
Next j
Next i
For i = 1 To 10
Print a(i);
Next i
Print
End Sub追问

上面的是 sub 子程序语体
有些变量已经得出了 只想让你检查检查 这例子我也有
不行我把写好的代码给你发去

追答

好,你把代码发给我吧!

追问

你给个邮箱吧 这上面发不了

追答

我试了一下,有点难,我没法作出来,技术不够好,不好意思!