Python排序函数:如何使用排序函数实现排序算法?
Python是一种高级编程语言,具有丰富的库和内置函数,其中包括排序函数。排序函数是一种用于对数据进行排序的算法,可以快速方便地实现数据排序。在Python中,常用的排序函数有内置函数 sorted() 和 list.sort() 以及 NumPy 库中的 np.sort() 函数等。
内置函数 sorted() 和 list.sort() 都可以用来对列表、元组或其他可迭代对象进行排序。它们支持三个可选参数:reverse,key 和 key 和 reverse。reverse 表示是否反向排序,默认为 False 表示正向排序;key 是一个用来产生键值的函数,例如若列表中嵌套列表,可以指定 key=lambda x:x[1] 对列表中的每个子列表中的第二个元素进行排序;最后,cmp 用于比较两个元素的大小,前提是要在使用 Python 2.x。
其基本使用示例:
# sorted() 函数 lst = [3, 4, 1, 5, 2, 6] sorted_lst = sorted(lst) print(sorted_lst) # [1, 2, 3, 4, 5, 6] # list.sort() 函数 lst = [3, 4, 1, 5, 2, 6] lst.sort() print(lst) # [1, 2, 3, 4, 5, 6]
可以看到,使用 sorted() 函数或者 list.sort() 函数,都可以对列表进行排序,并返回排序后的结果。
然而,这些内置的排序函数实现的是最优的排序算法,使用各种排序算法也可以实现排序。下面介绍一些经典的排序算法及其 Python 实现。
1. 冒泡排序算法
冒泡排序是一种基本的排序算法,它重复遍历整个列表,比较相邻的两个元素,如果顺序不对就交换位置。在一个完整的遍历中,最大或最小的元素会“冒泡”到列表的一端,然后在下一遍遍历中剔除掉该元素再进行排序。其时间复杂度为 O(n^2)。
其Python实现:
def bubble_sort(lst):
n = len(lst)
for i in range(n):
for j in range(n-1-i):
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
return lst
2. 选择排序算法
选择排序算法是一种简单的不稳定的排序算法,它遍历列表,在每次遍历中选出最小的元素,将其与未排序部分的首部交换。它的时间复杂度为 O(n^2)。
Python实现:
def selection_sort(lst):
n = len(lst)
for i in range(n-1):
min_idx = i
for j in range(i+1, n):
if lst[j] < lst[min_idx]:
min_idx = j
lst[i], lst[min_idx] = lst[min_idx], lst[i]
return lst
3. 插入排序算法
插入排序算法是一种稳定的排序算法,它将列表分为已排序部分和未排序部分,依次遍历未排序部分的元素,将其插入到已排序部分的正确位置。它的时间复杂度为 O(n^2)。
Python实现:
def insertion_sort(lst):
n = len(lst)
for i in range(1, n):
j = i-1
key = lst[i]
while j >= 0 and lst[j] > key:
lst[j+1] = lst[j]
j -= 1
lst[j+1] = key
return lst
4. 快速排序算法
快速排序算法是一种基于分治思想的排序算法。它选择一个基准值(也称为主元),将列表分为两个部分,小于基准值的部分和大于基准值的部分,并递归地应用此过程。它的时间复杂度为 O(nlogn)。
Python实现:
def quick_sort(lst):
if len(lst) <= 1:
return lst
pivot = lst[0]
left, right, mid = [], [], []
for i in lst:
if i < pivot:
left.append(i)
elif i > pivot:
right.append(i)
else:
mid.append(i)
return quick_sort(left) + mid + quick_sort(right)
总之,Python提供了多种排序算法的实现方式,内置的排序函数与自己实现的排序函数各有优点和局限。掌握这些方法可以在不同场合下使用不同的方法实现数据排序。
