📅  最后修改于: 2023-12-03 15:27:41.654000             🧑  作者: Mango
耐心排序 (Patience Sort) 是一种基于纸牌游戏 "纸牌集" (Patience Game) 的排序算法。它不同于其他排序算法,它将待排数据分解成许多堆,然后使用归并排序的思想进行合并。
耐心排序的时间复杂度主要由归并排序决定,平均时间复杂度为 $O(nlogn)$,空间复杂度为 $O(n)$。但在最坏情况下,最多需创建 $n$ 个堆,时间复杂度为 $O(n^2)$。
def patience_sort(arr):
piles = []
for val in arr:
new_pile = [val]
for i in range(len(piles)):
if val < piles[i][0]:
piles[i].insert(0, val)
break
else:
piles.append(new_pile)
sorted_list = []
while piles:
smallest_pile = piles.pop(0)
sorted_list.append(smallest_pile.pop(0))
if smallest_pile:
piles.insert(0, smallest_pile)
return sorted_list
耐心排序的稳定性、效率较高,适合对于中等大小的数据集进行排序。但在最坏情况下,时间复杂度会退化到 $O(n^2)$,所以需要根据实际情况进行选择。