3 ms·
Which would you prefer? def msort(xs, lo=None, hi=None): if lo is None: lo = 0 hi = len(xs) if hi-lo < 2: return mid = lo + (hi
by anonymoushn 5y ago
Which would you prefer?
def msort(xs, lo=None, hi=None):
if lo is None:
lo = 0
hi = len(xs)
if hi-lo < 2:
return
mid = lo + (hi-lo) // 2
msort(xs, lo, mid)
msort(xs, mid, hi)
merge(xs, lo, mid, hi)
def msort(xs):
s = [[0, len(xs) // 2, len(xs), "step 1"]]
while s:
lo, mid, hi, step = xs[-1]
if step == "step 1":
if hi-lo < 2:
s.pop()
else:
s[-1][3] = "step 2"
s.append([lo, lo + (mid-lo) // 2, mid, "step 1"])
elif step == "step 2":
s[-1][3] = "step 3"
s.append([mid, mid + (hi-mid) // 2, hi, "step 1"])
else:
s.pop()
merge(xs, lo, mid, hi)
- qsort 5y agoThe one that doesn't blow up the stack.