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

Python中实现排序算法的函数

发布时间:2023-06-08 09:39:26

Python作为一种最流行的编程语言之一,提供了许多内置的排序算法函数,同时也支持自定义实现排序算法的函数。本文将介绍Python内置的排序算法函数以及实现排序算法的函数。

一、Python内置的排序算法函数

Python内置了一些常见的排序算法函数,主要有sorted和sort两个函数。

sorted函数

sorted(iterable, *, key=None, reverse=False)

该函数接受一个可迭代对象作为参数,返回一个新的已排序的列表。默认按照元素的大小进行升序排列,也可以通过key参数指定自定义的排序规则。参数reverse=True可以指定降序排序。

示例:

# 默认升序排序

a = [3, 1, 4, 2, 5]

b = sorted(a)

print(b)  # [1, 2, 3, 4, 5]

# 按照绝对值升序排序

a = [-3, 1, -4, 2, -5]

b = sorted(a, key=abs)

print(b)  # [1, 2, -3, -4, -5]

# 按照字符串长度降序排序

a = ["hello", "world", "python", "is", "great"]

b = sorted(a, key=len, reverse=True)

print(b)  # ["python", "hello", "world", "great", "is"]

sort方法

list.sort(*, key=None, reverse=False)

该方法是list类的一个方法,排序后的结果直接影响原数组。和sorted函数一样,也可以通过key参数和reverse参数自定义排序规则。

示例:

# 默认升序排序

a = [3, 1, 4, 2, 5]

a.sort()

print(a)  # [1, 2, 3, 4, 5]

# 按照绝对值升序排序

a = [-3, 1, -4, 2, -5]

a.sort(key=abs)

print(a)  # [1, 2, -3, -4, -5]

# 按照字符串长度降序排序

a = ["hello", "world", "python", "is", "great"]

a.sort(key=len, reverse=True)

print(a)  # ["python", "hello", "world", "great", "is"]

二、自定义实现排序算法的函数

除了使用Python内置的排序算法函数外,我们还可以自己实现排序算法的函数。下面介绍一些常见的排序算法及其Python实现。

冒泡排序

冒泡排序是一种简单的排序算法,基本思路是不断交换相邻两个元素的位置,将最大的元素逐渐"冒泡"到最后。

def bubble_sort(arr):

    n = len(arr)

    for i in range(n - 1):

        for j in range(0, n - i - 1):

            if arr[j] > arr[j + 1]:

                arr[j], arr[j + 1] = arr[j + 1], arr[j]

插入排序

插入排序的基本思想是:将未排序的元素逐个插入到已排序的序列中。插入排序分为直接插入排序和希尔排序两种。

直接插入排序

直接插入排序的实现方式类似于打扑克牌时,手中的牌不断加入到已排序的牌中。

def insert_sort(arr):

    n = len(arr)

    for i in range(1, n):

        j = i - 1

        key = arr[i]

        while j >= 0 and key < arr[j]:

            arr[j + 1] = arr[j]

            j -= 1

        arr[j + 1] = key

希尔排序

希尔排序的基本思想是将数据分组,每组进行直接插入排序,然后逐渐缩小组的大小,直到组大小为1,完成排序。

def shell_sort(arr):

    n = len(arr)

    gap = n // 2

    while gap > 0:

        for i in range(gap, n):

            temp = arr[i]

            j = i

            while j >= gap and arr[j - gap] > temp:

                arr[j] = arr[j - gap]

                j -= gap

            arr[j] = temp

        gap //= 2

快速排序

快速排序是一种高效的排序算法,基本思路是先选定一个基准元素,将数组中小于基准元素的部分全部放到左边,大于等于基准元素的部分全部放到右边,然后对左右两个部分递归进行快速排序,直到排序完成。

def quick_sort(arr, left, right):

    if left >= right:

        return

    pivot = arr[right]

    i = left - 1

    for j in range(left, right):

        if arr[j] < pivot:

            i += 1

            arr[i], arr[j] = arr[j], arr[i]

    arr[i + 1], arr[right] = arr[right], arr[i + 1]

    quick_sort(arr, left, i)

    quick_sort(arr, i + 2, right)

归并排序

归并排序是一种分治算法,同样也是一种效率较高的算法。它的基本思想是将待排数组分成两半,对每一半分别进行归并排序,然后将两个已排序的数组归并成一个有序的数组。

def merge_sort(arr):

    if len(arr) <= 1:

        return arr

    mid = len(arr) // 2

    left = merge_sort(arr[:mid])

    right = merge_sort(arr[mid:])

    return merge(left, right)

def merge(left, right):

    result = []

    i, j = 0, 0

    while i < len(left) and j < len(right):

        if left[i] < right[j]:

            result.append(left[i])

            i += 1

        else:

            result.append(right[j])

            j += 1

    result += left[i:]

    result += right[j:]

    return result

三、总结

本文介绍了Python内置的排序算法函数sorted和sort以及自定义实现排序算法的函数。不同的排序算法适用于不同的场景,选择合适的排序算法能够提高程序效率。在实际应用中,我们可以根据排序的数据规模、数据类型以及时间复杂度等因素来选择适合的排序算法。