找到二个数组中第几大的数据。

fvflove 2008-10-02 08:53:05
现在有二个数组:设定为:

dim Arr_1 = Array(43,42,32,18,11,9,7,0,-1)

dim Arr_1 = Array(38,37,31,25,22,5,-1)

注意:上表是的数组是有序表。

现在的问题是:如果最快的找到第6大的数据: 31

要求:
1。算法的时间复杂度及空间复杂度必须最小。
2。即不建议用多重循环,也不建议再申请空间保存数组数据。
3。此题为讨论贴。
4。第一位给出合适算法的将得到50%的分,其它人员平均给分。
...全文
210 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yachong 2008-10-03
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim Arr_1, Arr_2
Dim i As Long, j As Long, k As Long
Dim x As Long
Arr_1 = Array(43, 42, 32, 18, 11, 9, 7, 0, -1)
Arr_2 = Array(38, 37, 31, 25, 22, 5, -1)
j = 0
k = 0
For i = 1 To 6
If Arr_1(j) > Arr_2(k) Then
x = Arr_1(j)
j = j + 1
Else
x = Arr_2(k)
k = k + 1
End If
Next
Debug.Print x
End Sub

困了,没仔细推敲,不知道是不是有问题
fvflove 2008-10-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 WallesCai 的回复:]
说了半天,楼主不要告诉我你一点都不懂,或者从来没有自己思考过解决方案,那样我会很失望滴
[/Quote]
楼上二位的代码,我没有进行验证,但是看了一下.
空间复杂度可以说是最小的.时间复杂度也是只是循环了N(N大数)次.
而且这种方法是我没有想到的.

四楼说我没有想过,其实我也想过很多办法.

但是大多数都是二个数组合并,排序.想取那一位就那一位.

我相信这样的办法谁都会想到的.

后来我想到了一个方法.(我是用C#写的,但是后来验证还是有点问题,大家有兴趣的话可以去C#.NET去翻一下)

最多 循环次数为 N(N大数)

等一会儿,我验证楼上二位的代码,再按我的思路写个VB的代码出来.
SYSSZ 2008-10-02
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Dim Arr_1()
Dim Arr_2()
Dim s
Dim i, j, k As Integer
Arr_1 = Array(43, 42, 32, 18, 11, 9, 7, 0, -1)
Arr_2 = Array(38, 37, 31, 25, 22, 5, -1)
Do While i < 6
If Arr_1(0) > Arr_2(0) Then
s = Arr_1(0)
Arr_1(0) = Arr_1(k + 1)
k = k + 1
Else
s = Arr_2(0)
Arr_2(0) = Arr_2(j + 1)
j = j + 1
End If
i = i + 1
Loop
MsgBox "第" & i & "个大数" & "=" & s
End Sub
zzyong00 2008-10-02
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
很明显LZ在给大家送分~
LX的加油
熊孩子开学喽 2008-10-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 plowman001 的回复:]
有序数组:
从两 个数组各取N(N=6)个数合成一个数组,然后再在新的数组用起泡法找到前六个大的(只找前六对于六以后的可以不排序)
[/Quote]
就是这么回事,合并之后还是一个简单排序问题,合并可以用2次COPYMEMORY到一个新数组,时间消耗基本等于零
如果采用的是冒泡排序,可以料想的优化方案:因为只需要的到第6大的数据,所以只需要进行6次相邻数据的两两比较和交换
如果原数组未排序,无非就是新数组的长度从12变成原来2个数组长度只和而已,外层循环依然是6次
要找到第N位,无非是把6用N来代替.

说了半天,楼主不要告诉我你一点都不懂,或者从来没有自己思考过解决方案,那样我会很失望滴
嗷嗷叫的老马 2008-10-02
  • 打赏
  • 举报
回复
算法.....我的伤心事.......匿了........
plowman001 2008-10-02
  • 打赏
  • 举报
回复
有序数组:
从两 个数组各取N(N=6)个数合成一个数组,然后再在新的数组用起泡法找到前六个大的(只找前六对于六以后的可以不排序)
fvflove 2008-10-02
  • 打赏
  • 举报
回复
关于题目的引申:
1。如果数组是无序表怎么办?
2。如果数组是多个数组又如何?
3。找到第N位最大数怎么弄?

7,785

社区成员

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

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