请告诉我为什么Python的这种排序函数不起作用:)
def sort(list):
if len(list)==0:
return list
elif len(list)==1:
return list
else:
for b in range(1,len(list)):
if list[b-1]>list[b]:
print (list[b-1])
hold = list[b-1]
list[b-1]=list[b]
list[b] = hold
a = [1,2,13,131,1,3,4]
print (sort(a))
答案 0 :(得分:4)
看起来您正在尝试实施邻居排序算法。你需要重复循环N次。由于您只循环遍历数组一次,最终会得到最大的元素(即在最后一个索引中),但其余部分保持未排序。
您可以使用pdb
自行调试算法。
或者,你可以使用python的built-in sorting。
答案 1 :(得分:1)
让我们来看看你的代码。 Sort是一个内置的Python函数(至少我相信它对于2.7和3.X都是一样的)所以当你自己创建函数时,试着远离使用内置函数的函数名称,除非你要覆盖它们(这是一个完全不同的主题。)这个想法也适用于您使用的参数。 list是python语言中的一种类型AKA,您将无法使用该变量名称。现在,在更改所有变量等之后,对代码进行一些处理......
当你完成你的功能时,你只会交换2个所选元素在需要时彼此相邻。这不适用于所有列表组合。您必须能够检查您所在的当前i是否在正确的位置。因此,如果end元素是List中的最低元素,那么你必须将它一直交换到列表的前面。有很多种排序方法(即快速排序,MergeSort,冒泡排序),这不是最好的方法...... :)这里有一些帮助:
def sortThis(L):
if (len(L) == 0 or len(L) == 1):
return list
else:
for i in range(len(L)):
value = L[i]
j = i - 1
while (j >= 0) and (L[j] > value):
L[j+1] = L[j]
j -= 1
L[j+1] = value
a = [1,2,13,131,1,3,4]
sortThis(a)
print a
答案 2 :(得分:0)
如果它有效,它将是世界上最好的排序算法(O(n))。您的算法仅将最大元素放在列表的末尾。你必须递归地应用你的函数列出[: - 1]。 你不应该使用python保留字