现在有二个数组:设定为: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%的分,其它人员平均给分。
1。算法的时间复杂度及空间复杂度必须最小。
2。即不建议用多重循环,也不建议再申请空间保存数组数据。
3。此题为讨论贴。
4。第一位给出合适算法的将得到50%的分,其它人员平均给分。
解决方案 »
- VB6 窗体模式问题
- 在(VBS)网页编程中:action 和 onsubmit() 或oncheck()事件可以同时用吗? 怎样才能做到根据(onsubmit)事件触发(action)命令.我的程序怎么是同时响应的阿,请各位大虾诊断一下,谢谢了,各位大虾!!
- 怎么实现这个功能?
- VB(数据库)基础问题
- vb中调用自定义函数
- 一个窗体加载的问题。
- 大家好,等着答复,关于数据类型的转化!
- 大家来探讨探讨设计模式在VB中的实现
- 求救数据库,急急!!!~
- edyang 的抱歉:最近由于收不到 CSDN 的信件,所以有些我回答的问题很可能不能及时跟踪和补充。[VB]
- 关于按钮的使用?
- 已知mdb文件有管理员密码,在asp中用KSASP.dll打开。
如果采用的是冒泡排序,可以料想的优化方案:因为只需要的到第6大的数据,所以只需要进行6次相邻数据的两两比较和交换
如果原数组未排序,无非就是新数组的长度从12变成原来2个数组长度只和而已,外层循环依然是6次
要找到第N位,无非是把6用N来代替.说了半天,楼主不要告诉我你一点都不懂,或者从来没有自己思考过解决方案,那样我会很失望滴
LX的加油
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
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
困了,没仔细推敲,不知道是不是有问题
空间复杂度可以说是最小的.时间复杂度也是只是循环了N(N大数)次.
而且这种方法是我没有想到的.四楼说我没有想过,其实我也想过很多办法.但是大多数都是二个数组合并,排序.想取那一位就那一位.我相信这样的办法谁都会想到的.后来我想到了一个方法.(我是用C#写的,但是后来验证还是有点问题,大家有兴趣的话可以去C#.NET去翻一下)最多 循环次数为 N(N大数)等一会儿,我验证楼上二位的代码,再按我的思路写个VB的代码出来.