为什么这种排序功能不适用于Python

时间:2013-10-24 19:26:10

标签: python sorting

请告诉我为什么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))

3 个答案:

答案 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

看看这个以获得更多排序乐趣:QuickSort MergeSort

答案 2 :(得分:0)

如果它有效,它将是世界上最好的排序算法(O(n))。您的算法仅将最大元素放在列表的末尾。你必须递归地应用你的函数列出[: - 1]。 你不应该使用python保留字