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

Python中的sorted函数实现排序方法

发布时间:2023-06-08 14:37:23

Python是一种高级编程语言,它拥有各种各样的内置函数来处理各种不同的数据类型和算法。其中,sorted函数是Python中一个非常重要的函数,用于对Python中的列表、元组等对象进行排序。这篇文章将介绍sorted()函数的用法和实现排序算法的基本方法。

一、sorted函数的用法

sorted()函数是Python内置的一个函数,用于对可迭代对象进行排序。sorted()函数可以处理的对象包括列表、元组等可迭代对象。sorted()函数有两个可选参数:reverse和key。

下面分别介绍这两个参数:

1、reverse参数

reverse参数用来控制排序顺序,如果reverse=True,那么结果是按照降序排列;如果reverse=False或者不填写任何参数,默认是按照升序排列。

例如:

a = [3, 2, 4, 1]
print(sorted(a))             # 输出升序排序后的列表
print(sorted(a, reverse=True)) # 输出降序排序后的列表

输出:

[1, 2, 3, 4]
[4, 3, 2, 1]

2、key参数

key参数用来指定排序方法中的比较函数,可以使用自定义的比较函数或是默认的比较函数。默认的比较函数是根据ASCII码值对字符串进行排序的。

例如:

a = ['abc', 'ABD', 'xy', 'XYZ']
print(sorted(a)) # 输出按照 ASCII 码值升序排序的列表
print(sorted(a, key=str.lower))# 输出按照字母大小写不敏感排序后的列表

输出:

['ABD', 'XYZ', 'abc', 'xy']
['abc', 'ABD', 'xy', 'XYZ']

二、实现sorted函数的排序算法

sorted()函数可以使用多种算法来实现排序,其中最常用的是归并排序和快速排序。本文将重点介绍这两种排序算法。

1、归并排序

归并排序是一种分治排序算法,将原序列拆分成较小的序列,再对这些序列采用归并排序,最后将排序后的序列重新合并。具体的实现可以参见以下代码:

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    mid = len(lst) // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])
    return merge(left, right)
    
def merge(left, right):
    i, j = 0, 0
    res = []
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            res.append(left[i])
            i += 1
        else:
            res.append(right[j])
            j += 1
    res += left[i:]
    res += right[j:]

    return res

这里的merge_sort使用了递归算法将序列拆分成最小的序列,然后再用merge函数将排序后的序列合并。

在merge函数中,用i和j分别表示两个序列的下标位置,根据归并的顺序判断左右两个序列中哪一个的元素先进入结果序列,最后将剩余的元素直接添加到结果序列即可。

2、快速排序

快速排序是一种基于分治思想的排序算法,其基本思想是采用分治的思想将序列分为前后两部分,前一部分保证所有元素小于后一部分的元素,然后再对前后两个部分分别进行快速排序,最终将排好序的两个部分合并起来即可。具体的实现可以参见以下代码:

def quick_sort(lst):
    if len(lst) <= 1:
        return lst
    pivot = lst[0]
    left = []
    right = []
    for i in range(1, len(lst)):
        if lst[i] < pivot:
            left.append(lst[i])
        else:
            right.append(lst[i])
    return quick_sort(left) + [pivot] + quick_sort(right)

在快速排序中,以第一个元素为pivot,将所有小于pivot的元素放到左边序列,大于pivot的放到右边序列。然后对左右序列进行递归操作,最后将左序列、右序列和pivot组成的列表当做结果返回即可。

三、总结

本文介绍了Python中的sorted()函数以及归并排序、快速排序两种排序算法的实现方法。Python的内置函数sorted()可以处理各种不同类型的可迭代对象,同时也支持reverse和key参数来控制排序顺序和排序方法。归并排序和快速排序则是两种非常常用的排序算法,归并排序算法比较稳定,适用于数量不是很大的数据,而快速排序算法则比较适合处理数量较大的问题。掌握这两种排序算法,对于开发过程中的数据处理问题会有很大的帮助。