我在寫一個爲班級玩撲克的python程序,我需要對五張牌手列表進行排序。我有一個名爲wins()的函數,它需要兩隻手,如果第一個擊中第二個,則返回True,如果不是,則返回False。我寫了一個快速排序的實現來對手的列表進行排序,並且我注意到它花費的時間遠遠超過預期,所以我將其編程爲打印每個正在排序的列表的長度。該函數如下所示:快速排序和python問題
def sort(l):
if len(l) <= 1:
return l
print len(l)
pivot = choice(l)
l.remove(pivot)
left = []
right = []
for i in l:
if wins(i, pivot) == True:
right.append(i)
else:
left.append(i)
return sort(left) + [pivot] + sort(right)
並且當我有它排序64的手,它印: 64, 53, 39, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, , 9, 8, 7, 6, 5, 4, 3, 2, 12, 7, 3, 2, 3, 2, 4, 3 , 2, 13, 9, 6, 2, 3, 2, 2, 3, 10, 8, 2, 5, 4, 3, 2.注意中間的連續序列?我無法弄清楚它爲什麼會這樣做,但它導致快速排序,像O(n^2)那樣運行。在每次迭代中選擇最強的手作爲支點是沒有意義的,但這似乎正在發生。我忽略了什麼?評論後
你爲什麼寫自己的排序?python是否有自己的排序功能? –
我不排序數字,我正在排序撲克牌。 –
似乎要做的事情是[創建lambda](https://wiki.python.org/moin/HowTo/Sorting)來對元組或命名對象進行排序。 –