下面是详细讲解“快速排序的四种Python实现(推荐)”的完整攻略,包括快速排序的定义、快速排序的基本思想、四种Python实现和两个示例说明。
快速排序定义
快速排序是一种常用的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均另一部分记录的关键字小,然后再分别对这两分记录继续进行排序,以达到整个序列有序的目的。
快速排序基本思想
快速排序的基本思想是分治法,具体过程如下:
- 从数列中挑出一个元素,称为“基准”(pivot)。
- 将所有比基准值小的元素放在基准前面,比基准值大的元素放在基准后面(相同的数可以放到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
四种Python实现
下面是四种Python实现快速排序的方法:
方法一:使用列表推导式
def quick_sort(lst):
if not lst:
return []
else:
pivot = lst[0]
less = [x for x in lst[1:] if x < pivot]
greater = [x for x in lst[1:] if x >= pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)
方法二:使用filter函数
def quick_sort(lst):
if not lst:
return []
else:
pivot = lst[0]
less = list(filter(lambda x: x < pivot, lst[1:]))
greater = list(filter(lambda x: x >= pivot, lst[1:]))
return quick_sort(less) + [pivot] + quick_sort(greater)
方法三:使用递归
def quick_sort(lst):
if len(lst) <= 1:
return lst
else:
pivot = lst[0]
left = [x for x in lst[1:] if x < pivot]
right = [x for x in lst[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
方法四:使用双向扫描
def quick_sort(lst):
if len(lst) <= 1:
return lst
else:
pivot = lst[0]
i = 0
j = len(lst) - 1
while i < j:
while i < j and lst[j] >= pivot:
j -= 1
if i < j:
lst[i] = lst[j]
i += 1
while i < j and lst[i] < pivot:
i += 1
if i < j:
lst[j] = lst[i]
j -= 1
lst[i] = pivot
left = quick_sort(lst[:i])
right = quick_sort(lst[i+1:])
return left + [pivot] + right
示例说明
以下两个示例,说明如何使用快速排序进行排序。
示例1
使用快速排序对一个列表进行排序。
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_lst = quick_sort(lst)
print(sorted_lst)
上述代码中,定义了一个列表lst,并使用quick_sort函数对其进行排序。
示例2
使用快速排序对一个文件中的数字进行排序。
with open("example.txt", "r") as f:
lst = [int(x) for x in f.readlines()]
sorted_lst = quick_sort(lst)
with open("sorted_example.txt", "w") as f:
for num in sorted_lst:
f.write(str(num) + "\n")
上述代码中,读取了一个名为example.txt的文件,其中包含一些数字,将这些数字读入一个列表lst中,并使用quick_sort函数对其进行排序。最后,将排序后的结果写入一个名为sorted_example.txt的文件中。