我有以下代码
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++?你知道吗
线路
是一个for循环,i从
lo+r
运行到hi-r
,不包括,步骤为step
。举个例子:注意,在
range(start, end, step)
中,起始值和结束值可以以任何方式排序,步长可以是正的或负的。这使得编写C版本有点麻烦。你知道吗因此,一旦你知道Python是伪代码,实际上
这相当于
<>(C或C++,爪哇,C等)(注意:这只在
step
为正时有效。如果步骤为负-即lo+r>;hi-r,则需要将检查更改为i>(hi-r)
)它所做的是在
lo+r
处启动一个计数器,将它移动step
个单位,直到计数器等于或超过hi-r
。你知道吗Python非常接近于伪代码。你知道吗
意思就是它所说的:用指定的
range
中的每个值i
执行以下代码。前两个值是范围的上下限,step
是要使用的值之间的距离。有关详细信息,请在Python解释器提示符处尝试help(range)
。你知道吗相关问题 更多 >
编程相关推荐