gpt4 book ai didi

带有嵌套 while 循环的 Python 选择排序

转载 作者:行者123 更新时间:2023-11-28 18:15:37 24 4
gpt4 key购买 nike

我知道我可以使用带有嵌套 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 循环似乎更简单,不是吗?尽管如此,我对如何做到这一点感到困惑。

最佳答案

首先,你的代码是错误的。你可以尝试把数组放在你的函数中。数组 = [1, 4, 7, 2, 0, 4, 6, 7, 8, 1, 3, 4]

那么,如果你使用for循环

def selectSort_for(list):
if list != None:
for i in range(len(list)):
min = i
for j in range(i + 1, len(list)):
if list[min] > list[j]:
min = j
if min != i:
list[min], list[i] = list[i], list[min]

return list

如果使用while,代码如下

def selectSort_while(list):
if list != None:
for i in range(len(list)):
min = i
x = i
while x + 1 < len(list):
x += 1
j = x
if list[min] > list[j]:
min = j
if min != i:
list[min], list[i] = list[i], list[min]

return list

哦,你的代码是错误的,因为你错过了相等的条件。顺便说一下,

temp = arr[cur]
arr[cur] = arr[k]
arr[k] = temp

这不是 pythonic 样式。

你的代码可能应该是这样的

def selection_sort(arr):
for k in range(len(arr)):
cur = k
for i in range(cur+1, len(arr)):
if arr[cur] > arr[i]:
cur = i

if cur != k:
arr[cur], arr[k] = arr[k], arr[cur]

关于带有嵌套 while 循环的 Python 选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com