伪代码:
输入参数:xi,c
输出参数:yi,c
初始化过程:
l1 ← 51
l2 ← 351
c.n ← 0
c.r1 ← {0,…}//length=l1
c.t1 ← {0,…}//length=l1
c.r2 ← {0,…}//length=l2
c.t2 ← {0,…}//length=l2
c.rtd ← {0,…}//length(l2-1)//2
迭代过程:
yi ← xi // 设置默认返回值
t1_0 ← c.t1[0] // 队列t1,提取队头元素
c.n ← c.n + 1 // 计数器 + 1
如果 c.n > c.l1 + c.l2 // 超过队列长度
c.n ← c.l1 + c.l2 + 10 // 计数器变更
c.t1 ← c.t1[1:] ∪{xi} // 循环左移,并右侧插入xi
如果c.n == c.l1
c.r1 ← 排序(c.t1) // 小的在前,大的在后面
b ← c.r1[(c.l1-1)/2] // 获取中值
否则 如果 c.n > c.l1
c.r1 ← 删除并插入 (c.r1, t1_0, xi) // 删除t1_0,插入xi
b ← c.r1[(c.l1-1)/2 -1] // 获取中值前一个的位置
否则
返回 yi
t2_1 ← c.t2[1] // 队列t2,提取队头元素,这里的队头是1不是0
c.t2 ← c.t2[1:] ∪{b} // 循环左移,并右侧插入b
如果 c.n == c.l1 + c.l2 – 1