python - 使用 unicode 升序对列表进行排序,没有循环,没有 sort(),使用递归
问题描述
我写下了这段代码,它可以工作,但是当我将它转换为.py
并尝试使用输入运行它时,我会写下递归已达到限制或类似的东西。
注意:在我的作业中,我没有使用sort()
、min()
和其他功能。
def sortl(lst, i, b_ord):
if len(lst) == i:
return lst
elif b_ord > ord(lst[i]):
lst[i - 1] = lst[i]
lst[i] = chr(b_ord)
b_ord = ord(lst[0])
i = 0
else:
b_ord = ord(lst[i])
sortl(lst, (i + 1), b_ord)
lst = list(input())
n = ord('0')
i = 0
sortl(lst,i,n)
print("".join(lst))
解决方案
您不需要使用chr
或ord
。sort
您可以使用帮助程序编写简单的递归insert
。我们将使用归纳推理来编写每个函数。
- 如果列表是一个或更少的元素,则返回列表
- (归纳)至少有两个元素。
insert
头,l[0]
, 到sort
ed 尾,l[1:]
def sort(l):
if len(l) < 2:
return l # 1
else:
return insert(sort(l[1:]), l[0]) # 2
insert
将值插入排序列表 -
- 如果列表为空,则返回一个单例列表
value
- (归纳)列表作为至少一个元素。如果列表头小于要插入的值,则将列表头添加到递归子问题
- (归纳)列表至少有一个元素并且大于值,将值添加到列表中
def insert(sorted, value):
if not sorted:
return [value] # 1
elif sorted[0] < value:
return [sorted[0]] + insert(sorted[1:], value) # 2
else:
return [value] + sorted # 3
print(sort([5,3,6,1,4,7,2]))
print(sort("gebafcd"))
[1, 2, 3, 4, 5, 6, 7]
['a', 'b', 'c', 'd', 'e', 'f', 'g']
这绝对不是性能最好的排序技术,但它足够简单,可以开始理解递归
推荐阅读
- django - 如何使用 Django 生成 Word 文档
- single-page-application - 有一种方法可以避免在 PWA 中的每个请求都下载 Spa Bundle
- python - 在 Python 中跨多个模块的每个对象日志记录
- azure-devops - 是否可以在 YAML 文件中定义分支策略?
- python - 如何在函数外使用函数中的变量
- graphviz - 如何在 Graphviz 中垂直对齐子图簇?
- r - 根据另一列的值平均一列的特定行
- .net - 如何使用配置转换删除环境变量
- javascript - 如何理解这个高阶函数闭包发生了什么
- java - 如何从 Hibernate 元数据中获取特定类/实体的所有子类的列表?