我有以下代码
def compare_and_swap(x, a, b):
if x[a] > x[b]:
x[a], x[b] = x[b], x[a]
def oddeven_merge(x, lo, hi, r):
step = r * 2
if step < hi - lo:
oddeven_merge(x, lo, hi, step)
oddeven_merge(x, lo + r, hi, step)
for i in range(lo + r, hi - r, step):
compare_and_swap(x, i, i + r)
else:
compare_and_swap(x, lo, lo + r)
def oddeven_merge_sort_range(x, lo, hi):
""" sort the part of x with indices between lo and hi.
Note: endpoints (lo and hi) are included.
"""
if (hi - lo) >= 1:
# if there is more than one element, split the input
# down the middle and first sort the first and second
# half, followed by merging them.
mid = lo + ((hi - lo) / 2)
oddeven_merge_sort_range(x, lo, mid)
oddeven_merge_sort_range(x, mid + 1, hi)
oddeven_merge(x, lo, hi, 1)
def oddeven_merge_sort(x):
oddeven_merge_sort_range(x, 0, len(x)-1)
>>> data = [4, 3, 5, 6, 1, 7, 8]
>>> oddeven_merge_sort(data)
>>> data
[1, 2, 3, 4, 5, 6, 7, 8]
对我来说一切都很清楚,但只有这条线不能理解
for i in range(lo + r, hi - r, step):
如何使用伪代码或其他语言(例如C ++)读取它?
答案 0 :(得分:3)
这相当于
for(int i=lo+r;i<(hi-r);i+=step)
in C(或C ++,Java,C#等)
(注意:这仅在step
为正时才有效。如果步骤为负 - 即lo + r&gt; hi-r,则需要将支票更改为i>(hi-r)
)
它的作用是在lo+r
开始计数器,将其移至step
个单位,直到计数器等于或超过hi-r
。
答案 1 :(得分:1)
行
for i in range(lo + r, hi - r, step):
是一个 for循环,我从lo+r
到hi-r
不包含,步骤为step
。这是一个例子:
>>> for i in range(10, 31, 3):
... print i
...
10
13
16
19
22
25
28
请注意,在range(start, end, step)
中,可以以任何方式排序开始和结束值,步骤可以是正数或负数。这使得编写C版本有点麻烦。
因此,一旦你知道 Python ,for i in range(lo + r, hi - r, step
就是伪代码:事实上,
答案 2 :(得分:1)
如何使用伪代码阅读?
Python非常接近伪代码。
for i in range(lo + r, hi - r, step):
表示它所说的内容:使用指定i
中的每个range
值执行以下代码。前两个值是范围的下限和上限,step
是要使用的值之间的距离。有关更多信息,请在Python解释器提示符处尝试help(range)
。
答案 3 :(得分:0)
从lo + r
(包括)到hi -r
(不包含)的循环,以step
为增量。
假设步骤是肯定的,在类C语言中它可以写成:
for (i = lo + r; i < hi - r; i += step) { ... }
用Python编写它的另一种方法:
i = lo + r
while i < hi - r:
# loop body
i += step
如果步骤为否定,则上述代码中的<
变为>
。
答案 4 :(得分:0)
您可以将其读作以下伪代码(正面步骤):
i = lo + r
while i < hi - r:
# body of loop
i = i + step
对于否定步骤:
i = lo + r
while i > hi - r:
# body of loop
i = i + step
换句话说,它从第一个值迭代i
变量,直到达到或传递第二个值,每次通过循环调整第三个值。