积极答复者
如何给二维数组排序?

问题
-
最近在这个问题上郁闷了好几天,也是自己一直都没解决的问题。即如何给二维数组快速排序?
如有一个数组:
a(0, 0) = 7: a(0, 1) = 20
a(1, 0) = 3: a(1, 1) = 7
a(2, 0) = 6: a(2, 1) = 8
a(3, 0) = 9: a(3, 1) = 7
a(4, 0) = 1: a(4, 1) = 11
a(5, 0) = 34: a(5, 1) = 4
a(6, 0) = 5: a(6, 1) = 6
a(7, 0) = 7: a(7, 1) = 34
a(8, 0) = 23: a(8, 1) = 78
a(9, 0) = 33: a(9, 1) = 9
a(10, 0) = 0: a(10, 1) = 5
a(11, 0) = 7: a(11, 1) = 23
能通过一个函数,先将其按0列排序,然后在0列的基础上,即将0列中相同的元素在第一列排序,拍完后为:
a(0, 0) =0: a(0, 1) = 5
a(1, 0) = 1: a(1, 1) = 11
a(2, 0) = 3: a(2, 1) = 7
a(3, 0) = 5: a(3, 1) = 6
a(4, 0) = 6: a(4, 1) = 8
a(5, 0) =7: a(5, 1) = 20---
a(6, 0) = 7: a(6, 1) = 23---第二次仅对0列中相同的项再排序
a(7, 0) = 7: a(7, 1) = 34---
a(8, 0) = 9: a(8, 1) = 7
a(9, 0) = 23: a(9, 1) = 78
a(10, 0) = 33: a(10, 1) = 9
a(11, 0) = 34: a(11, 1) = 4
我已经用冒泡法做到了,但效率低,不用Arrary.sort一类的现成函数,请教有没有什么别的好办法,如快排。谢谢
答案
-
先转成一维的,排序后再转回来
Code SnippetDim a(11, 1) As Integer
a(0, 0) = 7 : a(0, 1) = 20
a(1, 0) = 3 : a(1, 1) = 7
a(2, 0) = 6 : a(2, 1) = 8
a(3, 0) = 9 : a(3, 1) = 7
a(4, 0) = 1 : a(4, 1) = 11
a(5, 0) = 34 : a(5, 1) = 4
a(6, 0) = 5 : a(6, 1) = 6
a(7, 0) = 7 : a(7, 1) = 34
a(8, 0) = 23 : a(8, 1) = 78
a(9, 0) = 33 : a(9, 1) = 9
a(10, 0) = 0 : a(10, 1) = 5
a(11, 0) = 7 : a(11, 1) = 23Dim i As Integer
Dim b(11) As Long
For i = 0 To 11
b(i) = a(i, 0) * 10000 + a(i, 1)
NextArray.Sort(b)
For i = 0 To 11
a(i, 0) = b(i) \ 10000
a(i, 1) = b(i) - a(i, 0) * 10000
NextFor i = 0 To 11
Console.WriteLine("a({0}, 0)={1}:a({0}, 1)={2}", i, a(i, 0), a(i, 1))
Next
全部回复
-
先转成一维的,排序后再转回来
Code SnippetDim a(11, 1) As Integer
a(0, 0) = 7 : a(0, 1) = 20
a(1, 0) = 3 : a(1, 1) = 7
a(2, 0) = 6 : a(2, 1) = 8
a(3, 0) = 9 : a(3, 1) = 7
a(4, 0) = 1 : a(4, 1) = 11
a(5, 0) = 34 : a(5, 1) = 4
a(6, 0) = 5 : a(6, 1) = 6
a(7, 0) = 7 : a(7, 1) = 34
a(8, 0) = 23 : a(8, 1) = 78
a(9, 0) = 33 : a(9, 1) = 9
a(10, 0) = 0 : a(10, 1) = 5
a(11, 0) = 7 : a(11, 1) = 23Dim i As Integer
Dim b(11) As Long
For i = 0 To 11
b(i) = a(i, 0) * 10000 + a(i, 1)
NextArray.Sort(b)
For i = 0 To 11
a(i, 0) = b(i) \ 10000
a(i, 1) = b(i) - a(i, 0) * 10000
NextFor i = 0 To 11
Console.WriteLine("a({0}, 0)={1}:a({0}, 1)={2}", i, a(i, 0), a(i, 1))
Next