【发布时间】:2018-07-14 04:27:06
【问题描述】:
我知道我可以使用带有嵌套 for 循环的选择排序对数组进行排序,如下所示:
def selection_sort(arr):
for k in range(len(arr)):
cur = k
for i in range(cur, len(arr)):
if arr[cur] > arr[i]:
cur = i
temp = arr[cur]
arr[cur] = arr[k]
arr[k] = temp
但这可以通过嵌套在 for 循环中的 while 循环来完成吗?我很好奇,因为我看到它提到这个选择排序函数的语法可能类似于插入排序函数,例如下面的那个:
def insertion_sort(arr):
for k in range(1, len(arr)):
cur = arr[k]
j = k
while j > 0 and arr[j-1] > cur:
arr[j] = arr[j-1]
j = j - 1
arr[j] = cur
我是否忽略了一些简单的事情?自从我使用 python 以来已经有一段时间了,但是使用 for 循环而不是 while 循环似乎更简单,不是吗?不过,我对如何做到这一点感到困惑。
【问题讨论】:
-
任何可以用
for循环完成的事情,也可以用while循环完成(这是一个定理)。 -
您的 for 循环只是遍历索引范围,这可以通过 while 循环非常简单地完成:
i = 0; while i < len(arr): <do some stuff> i += 1 -
但是你应该使用for循环。
-
@juanpa.arrivillaga 谢谢,如果我能让你的大脑检查我的工作,我有: for k in range(len(arr)): cur = ki = 0 while i
-
我知道您这样做只是为了教育目的,但不要将选择排序用于任何真实的事情。这是terrible。