请教一算法(求高手)

来源:百度知道 编辑:UC知道 时间:2024/06/23 08:52:33
现在假设有100个数 这些数的范围在[0,60]之间
我现在二分这个区间[0,30];(30,60]那么这些数就分散在这两个区间内了,然后我再分这个两个区间[0,30];(30,60]即分为[0,15];(15,30];(30,45];(45,60]那么这些数分散到这四个区间内了,依次类推,均分区间 直到划分区间中的任意个区间 没有上面100个区间的数字为止。要求返回的时知道我划分了几个区间;并且知道这些边界的值
例如:有2.01、3.2、4.20、8、9、10可是划分的区间有[4、5)、[5、6]、[7、8]。而2.01、3.2、4.20、8、9、10这些数没有一个在区间[5、6]中,那么就终止再划分区间了)

[0、15]分成[0、7.5]和[7.5、15] 区间边界不一是整数

请楼主再说明一下碰到如[0,15]不能平均二等分的区间时怎末办?

'就按你说的假设设计了:

Option Explicit
Dim S(99) As Single '存放随机生成的100个[0,60]之间的数
Dim I As Integer '循环变量

Private Sub Command1_Click()
Dim S1() As Integer '存放小区间内数的个数
Dim S2(99) As Single '存放区间端点
Dim L(99) As Single '临时存放
Dim N As Integer '存放分成几个小区间
Dim M As Integer '记数器
Dim J As Integer '循环变量
S2(0) = 0
S2(1) = 60
N = 1
Do
L(0) = S2(0)
M = 0
For I = 1 To 2 * N - 1
If I Mod 2 = 1 Then
L(I) = (S2(M) + S2(M + 1)) / 2
M = M + 1
Else
L(I) = S2(I / 2)
End If
Next I
L(2 * N) = S2(N)
N = N * 2
For I = 0 To N
S2(I) = L(I)
Next
ReDim S1(N -