请问怎么给数组里的内容排序????

Litao81 2004-04-01 10:50:23
如果一个数组里杂乱的存着一些数据
如 8、1、12、56、J、a 怎么按倒序啊或者某种规则排序
56、12、8、1 或者 1、8、12、56
有没有什么函数啊
...全文
131 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2004-04-08
  • 打赏
  • 举报
回复
Sub STRINGSORT(ByRef a() As String, Optional sort As String = "UP") '字符串排序
Dim min As Long, max As Long, num As Long, first As Long, last As Long, temp As Long, all As New Collection, steps As Long
min = LBound(a)
max = UBound(a)
all.Add a(min)
steps = 1
For num = min + 1 To max

first = 1
last = all.Count
If a(num) < all(1) Then all.Add a(num), BEFORE:=1: GoTo nextnum '加到第一项
If a(num) > all(last) Then all.Add a(num), AFTER:=last: GoTo nextnum '加到最后一项


Do While last > first + 1 '利用DO循环减少循环次数
temp = (last + first) \ 2
If a(num) > all(temp) Then
first = temp
Else
last = temp
steps = steps + 1
End If
Loop
all.Add a(num), BEFORE:=last '加到指定的索引

nextnum:
steps = steps + 1
Next
For num = min To max
If sort = "UP" Or sort = "up" Then a(num) = all(num - min + 1): steps = steps + 1 '升序
If sort = "DOWN" Or sort = "down" Then a(num) = all(max - num + 1): steps = steps + 1 '降序
Next
MsgBox "本数组共经过 " & steps & "步实现" & IIf(sort = "UP" Or sort = "up", "升序", "降序") & "排序!", 64, "INFORMATION"
Set all = Nothing
End Sub

Private Sub Command1_Click()
Const temp = "0123456789abcdefghijklmnopqrstuvwxyz"
Dim x(200) As String

For i = 0 To 200
Randomize
x(i) = Mid(temp, Int(Rnd * 35 + 1), 1) & Mid(temp, Int(Rnd * 35 + 1), 1) & Mid(temp, Int(Rnd * 35 + 1), 1)
Next
MsgBox Join(x, ","), 64, "before sort"
STRINGSORT x, "down"' 降序
MsgBox Join(x, ","), 64, "after sort"
End Sub
zhuixing 2004-04-08
  • 打赏
  • 举报
回复
可以在数据库中打开时就order by排序,还有list方法对小的数据还可以,大量的不易采用……
liyan010 2004-04-01
  • 打赏
  • 举报
回复
of123()的方法好!
强烈支持
射天狼 2004-04-01
  • 打赏
  • 举报
回复
其实LISTBOX内部用的也无非是快速排序的算法而已,如果数据比较多的话还要一条条的全插入到LISTBOX中,反而影响速度,还不如自己排序算了,程序员最好不要偷懒啊~~~~~
dragonscorpico 2004-04-01
  • 打赏
  • 举报
回复
如下程序为何得不到预想的结果

'字符串快速排序(从小到大)
'函数:StrSortAZ
'参数:sArr String数组,First 数组的左边界,Last 数组右边界.
'返回值:无
'例子:
Public Sub StrSortAZ(ByRef sArr, First As Long, Last As Long)
Dim vSplit As String, vT As String
Dim I As Long, j As Long, iRand As Long

If First < Last Then
If Last - First = 1 Then
If sArr(First) > sArr(Last) Then
vT = sArr(First): sArr(First) = sArr(Last): sArr(Last) = vT
End If
Else
iRand = Int(First + (Rnd * (Last - First + 1)))
vT = sArr(Last): sArr(Last) = sArr(iRand): sArr(iRand) = vT
vSplit = sArr(Last)
Do
I = First: j = Last
Do While (I < j) And (sArr(I) <= vSplit)
I = I + 1
Loop
Do While (j > I) And (sArr(j) >= vSplit)
j = j - 1
Loop

If I < j Then
vT = sArr(I): sArr(I) = sArr(j): sArr(j) = vT
End If
Loop While I < j

vT = sArr(I): sArr(I) = sArr(Last): sArr(Last) = vT

If (I - First) < (Last - I) Then
StrSortAZ sArr, First, I - 1
StrSortAZ sArr, I + 1, Last
Else
StrSortAZ sArr, I + 1, Last
StrSortAZ sArr, First, I - 1
End If
End If
End If
End Sub


Private Sub Command1_Click()
StrTemp = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
Dim I As Long
ReDim NEWARR(10)

For I = 0 To 9
Randomize
NEWARR(I) = StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & _
"." & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0)) & StrTemp(Int((35 * Rnd) + 0))
Debug.Print "Bef-" & NEWARR(I)
Next I

Call StrSortAZ(NEWARR, LBound(NEWARR), UBound(NEWARR))

For I = 0 To 9
Debug.Print "Aft-" & NEWARR(I)
Next I
End Sub

-------------------输出
Bef-zuact.fsn
Bef-cdrfh.25r
Bef-xaftq.hzl
Bef-i627z.vug
Bef-33pm8.boa
Bef-zfjc1.fyu
Bef-lc6qb.ttp
Bef-57u4k.7nj
Bef-r4hjt.nhd
Bef-d14x1.1c7
Aft- '''这一行数据为空
Aft-33pm8.boa
Aft-57u4k.7nj
Aft-cdrfh.25r
Aft-d14x1.1c7
Aft-i627z.vug
Aft-lc6qb.ttp
Aft-r4hjt.nhd
Aft-xaftq.hzl
Aft-zfjc1.fyu
of123 2004-04-01
  • 打赏
  • 举报
回复
简单方法:
把数组元素添加到一个 Sorted = True 的 ListBox 中。
wumy_ld 2004-04-01
  • 打赏
  • 举报
回复
排序算法是最基础的东西了
CALG 2004-04-01
  • 打赏
  • 举报
回复
'
'字符串快速排序(从小到大)
'函数:StrSortAZ
'参数:sArr String数组,First 数组的左边界,Last 数组右边界.
'返回值:无
'例子:
Public Sub StrSortAZ(ByRef sArr() As String, First As Long, Last As Long)
Dim vSplit As String, vT As String
Dim I As Long, j As Long, iRand As Long

If First < Last Then
If Last - First = 1 Then
If sArr(First) > sArr(Last) Then
vT = sArr(First): sArr(First) = sArr(Last): sArr(Last) = vT
End If
Else
iRand = Int(First + (Rnd * (Last - First + 1)))
vT = sArr(Last): sArr(Last) = sArr(iRand): sArr(iRand) = vT
vSplit = sArr(Last)
Do
I = First: j = Last
Do While (I < j) And (sArr(I) <= vSplit)
I = I + 1
Loop
Do While (j > I) And (sArr(j) >= vSplit)
j = j - 1
Loop

If I < j Then
vT = sArr(I): sArr(I) = sArr(j): sArr(j) = vT
End If
Loop While I < j

vT = sArr(I): sArr(I) = sArr(Last): sArr(Last) = vT

If (I - First) < (Last - I) Then
StrSortAZ sArr(), First, I - 1
StrSortAZ sArr(), I + 1, Last
Else
StrSortAZ sArr(), I + 1, Last
StrSortAZ sArr(), First, I - 1
End If
End If
End If
End Sub
CALG 2004-04-01
  • 打赏
  • 举报
回复

'
'数值快速排序(从小到大)
'函数:NumSortAZ
'参数:Myarray Double数组,L 数组的左边界,R 数组右边界.
'返回值:无
'例子:
Public Sub NumSortAZ(ByRef Myarray, L As Long, R As Long)
Dim I As Long, j As Long, A As Long
Dim TmpX As Variant, TmpA As Variant

I = L: j = R: TmpX = Myarray((L + R) / 2)

While (I <= j)
While (Myarray(I) < TmpX And I < R)
I = I + 1
Wend
While (TmpX < Myarray(j) And j > L)
j = j - 1
Wend
If (I <= j) Then
TmpA = Myarray(I)
Myarray(I) = Myarray(j)
Myarray(j) = TmpA
I = I + 1: j = j - 1
End If
Wend
If (L < j) Then Call NumSortAZ(Myarray, L, j)
If (I < R) Then Call NumSortAZ(Myarray, I, R)
End Sub
victorycyz 2004-04-01
  • 打赏
  • 举报
回复

在窗体上放一个listbox,设置其sorted为true。

Option Explicit

Private Sub Form_Load()

Dim a(5) As String
Dim i As Integer

List1.Clear
List1.Visible = False

a(0) = "9": a(1) = "a": a(2) = "5": a(3) = "4": a(4) = "s": a(5) = "1"

Me.Show
Print "排序前"
For i = 0 To 5
List1.AddItem a(i)
Print a(i)
Next

For i = 0 To 5
a(i) = List1.List(i)
Next

Print
Print "排序后"
For i = 0 To 5
Print a(i)
Next
End Sub
射天狼 2004-04-01
  • 打赏
  • 举报
回复
没学过C或者PASCAL以及数据结构吗?
在学语言的时候接触过冒泡,选择,快速排序之类的编程,学数据结构的时候系统的对每种排序算法的速度做了全面的描述,还不知道!?
mmcgzs 2004-04-01
  • 打赏
  • 举报
回复
同意偷懒

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧