请各位大侠帮帮忙,写一个在考勤时间数组上插入一段加班时间的算法。

DreamManor 2004-08-12 11:23:22
考勤正班时间数组(数组个数为2的倍数,最长有9个时间段):
arrTime(0) = 08:00
arrTime(1) = 12:00

arrTime(2) = 14:00
arrTime(3) = 18:00
。。。
。。。

现在有一个加班时间段,例如 12:30-13:30
加班时间段需要按时间顺序插入以上数组中,形成以下数组:
arrTime(0) = 08:00
arrTime(1) = 12:00

arrTime(2) = 12:30
arrTime(3) = 13:30

arrTime(4) = 14:00
arrTime(5) = 18:00
。。。
。。。

加班时间段是不确定的,考勤正班时间数组的时间段也是不确定的,
如何写一段算法能将加班时间段插入到数组的正确位置上。

注意:加班时间段是不会与正班时间段重合的。



...全文
193 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2004-08-13
  • 打赏
  • 举报
回复
数组加排序。
如果只是一般的加班时间的话,没有多少数据,随便用什么排序方法都可以。
DreamManor 2004-08-13
  • 打赏
  • 举报
回复
谢谢northwolves(狼行天下),

有没有其他的朋友再写写其他的算法,让我好有一个比较。

Zygodactyous(Zygodactyous) :
暂时不考虑休息日加班的情况
Zygodactyous 2004-08-13
  • 打赏
  • 举报
回复
有个新类型叫桶数据结构,没用过,有的人说很好,可以考虑使用
另:是不是还要考虑在休息日加班的情况(这可是经常发生的事儿),如在周六加班是,正班的时间段也变成加班的时间段了。
northwolves 2004-08-13
  • 打赏
  • 举报
回复
Sub inserttime(ByVal period As String, ByRef arrtime() As String)
Dim TEMP1 As String, TEMP2 As String, TEMP As Integer, I As Integer, MAX As Integer
TEMP1 = Trim(Split(period, "-")(0))
TEMP2 = Trim(Split(period, "-")(1))
MAX = UBound(arrtime)


For I = 1 To MAX - 1
If TEMP1 > arrtime(I - 1) Then TEMP = I
Next

If TEMP2 < arrtime(0) Then TEMP = 0
If TEMP1 > arrtime(MAX) Then TEMP = MAX

ReDim Preserve arrtime(MAX + 2)

For I = MAX + 2 To TEMP + 2 Step -1
arrtime(I) = arrtime(I - 2)
Next

arrtime(TEMP + 1) = TEMP2
arrtime(TEMP) = TEMP1

End Sub
Private Sub Command1_Click()
Dim arrtime() As String, I As Integer
ReDim arrtime(3)
arrtime(0) = "08:00"
arrtime(1) = "12:00"

arrtime(2) = "14:00"
arrtime(3) = "18:00"

MsgBox Join(arrtime, vbCrLf)
inserttime "12:30-13:30", arrtime
MsgBox Join(arrtime, vbCrLf)
End Sub


bubu198 2004-08-13
  • 打赏
  • 举报
回复
用 Collection(集合),因为可以在指定的位置插入新的成员
colTime.add time33 , , 4
Collection(集合)还可以删除指定位置的成员
colTime.remove,3
zhangzhijian 2004-08-13
  • 打赏
  • 举报
回复
两个都可以啊!
cqm2099 2004-08-13
  • 打赏
  • 举报
回复
学习。。。。。。。。。
lixishen 2004-08-13
  • 打赏
  • 举报
回复
不用数组嘛。用 Collection(集合)想放多少就放多少
northwolves 2004-08-13
  • 打赏
  • 举报
回复
数据不多,怎么排序也可以。
数据多可以考虑使用 COPYMEMORY 移动数组
也可以用LISTBOX 实现

'add a listbox(sort=true) and a commandbutton to form1:

Dim arrtime() As String
Private Sub Command1_Click()
Dim I As Integer
List1.AddItem Split("12:30-13:30", "-")(0)
List1.AddItem Split("12:30-13:30", "-")(1)
ReDim arrtime(List1.ListCount - 1)
For I = 0 To List1.ListCount - 1
arrtime(I) = List1.List(I)
Next
'MsgBox Join(arrtime, vbCrLf)
End Sub

Private Sub Form_Load()
Dim I As Integer
ReDim arrtime(3)
arrtime(0) = "08:00"
arrtime(1) = "12:00"
arrtime(2) = "14:00"
arrtime(3) = "18:00"
For I = 0 To UBound(arrtime)
List1.AddItem arrtime(I)
Next
End Sub
DreamManor 2004-08-12
  • 打赏
  • 举报
回复
rainstormmaster(暴风雨 v2.0):
能不能劳驾你帮我写一个效率最高的算法呢。
rainstormmaster 2004-08-12
  • 打赏
  • 举报
回复
用动态数组,先排序,找到插入位置,然后重新给数组赋值
或者直接给数组加一个元素,然后排序
DreamManor 2004-08-12
  • 打赏
  • 举报
回复
另外:
1。正班时间数组也可能是空的,即没有正班时间,只有加班时间。
2。如果加班时间段与正班时间段发生重合,则不插入加班时间段到数组中。
3。加班时间段正确插入后,还要得到加班时间段的插入位置,即加班时间段的数组索引。

7,763

社区成员

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

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