欢迎访问宙启技术站
智能推送

Python排序函数:如何使用排序函数实现排序算法?

发布时间:2023-06-17 21:57:54

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提供了多种排序算法的实现方式,内置的排序函数与自己实现的排序函数各有优点和局限。掌握这些方法可以在不同场合下使用不同的方法实现数据排序。