-5

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

3 回答 3

4

看起来您正在尝试实现邻居排序算法。您需要重复循环 N 次。由于您只在数组中循环一次,因此您最终会得到最大的元素在其位置(即在最后一个索引中),但其余元素未排序。

你可以自己调试你的算法,使用pdb.

或者,您可以使用 python 的内置排序

于 2013-10-24T19:29:03.477 回答
1

让我们看看你的代码。Sort 是一个内置的 Python 函数(至少我相信 2.7 和 3.X 都是一样的)所以当你创建自己的函数时,尽量不要用内置函数命名该函数,除非你要覆盖它们(这是一个完全不同的主题。)这个想法也适用于您使用的参数。list 是 python 语言 AKA 中的一种类型,您将无法使用该变量名称。现在,在您更改所有变量等之后对您的代码进行一些工作......

当您完成您的功能时,您只会交换两个选定的元素在需要时彼此相邻。这不适用于所有列表组合。您必须能够检查您所在的当前 i 是否在正确的位置。因此,如果结束元素是列表中的最低元素,那么您必须让它一直交换到列表的前面。有很多排序方法(即快速排序、合并排序、冒泡排序),这不是最好的方法...... :) 这里有一些帮助:

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

于 2013-10-24T20:28:09.823 回答
0

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

于 2013-10-24T19:41:46.653 回答