python - 如何处理递归python排序函数中的范围
问题描述
我正在用 Python 实现 Stooge Sort,但我不明白为什么我对数组排序的更改没有坚持下去。换句话说,当我递归地向下钻取时,似乎正在交换单元格,但是在函数返回之后,我的数组的顺序没有改变。这是一个范围问题,还是我还不明白的其他一些pythonism?还是我的算法不正确?
import math
def StoogeSort(A):
n = len(A)
if (n == 2 and A[0] > A[1]):
tmp = A[0]
A[0] = A[1]
A[1] = tmp
elif n > 2:
m = int(math.ceil((2 * n) / 3))
StoogeSort(A[0:m])
StoogeSort(A[m-n:n])
StoogeSort(A[0:m])
return A
A = [4,2,1]
StoogeSort(A)
print "End:",A
A = [44,12,8,33,100]
StoogeSort(A)
print "End:",A
解决方案
问题在于您的切片 -A[0:m]
等。这些不会创建原始列表的视图,而是创建新列表。
您可以使用本答案底部所述的 numpy 数组,或者使用递归调用的返回值来构造要返回的新列表。
推荐阅读
- rxjs6 - rxjs 可观察流:如何对每个第 n 个事件执行副作用?
- javascript - 将数据从 JS 下载到 JS html 文件中
- amazon-web-services - 如何从 Fargate 任务中正确公开 API?
- python - xlrd - 将 Excel 时间转换为 mysql 日期格式?
- django - 从通用 ListView html 中的选定对象获取 pk 以填充新表单 (CBV) 的 FK
- android - 将数组从活动传递到片段的问题
- android - Android Glide - 无法回收已回收的资源
- c - 使用替换密码加密不会生成有效的 ASCII 输出
- android - DialogFragment.onDismiss() 中的空指针异常
- sql - 如何在同一更新查询中使用另一列新值更新 xml 列节点值?