python排序算法代码

在编程世界中,排序算法是基石之一。作为一种流行的编程语言,Python提供了多种排序方法,以便程序员可以根据不同的场景选择最合适的算法。

冒泡排序

泡沫排序是排序算法中最容易理解和实现的一种。算法的核心是比较相邻两个元素的大小并进行交换,直到没有一对数字需要交换,即认为排序已经完成。虽然简单,但在数据量大的情况下效率不高。

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

选择排序

通过在数据结构中寻找最小(或最大)元素,选择排序与数组的起始位置进行交换,然后从剩余元素中寻找最小(大)元素,继续与数组未排序部分的起始位置进行交换,直到整个数组排序完成。

def selection_sort(arr):
    for i in range(len(arr)):
        min_idx = i
        for j in range(i+1, len(arr)):
            if arr[min_idx] > arr[j]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

插入排序

插入排序以其“在排序片段中插入新元素”的直观思维受到初学者的喜爱。从数组的第二个元素开始,它将选定的元素与之前的元素进行比较,并将其插入正确的位置,以此类推,直到最后一个元素。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i-1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    return arr

归并排序

合并排序采用分治法的思想,将大问题分成小问题解决再合并。该算法效率高,特别适用于大数据量的排序。

def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        L = arr[:mid]
        R = arr[mid:]
        
        merge_sort(L)
        merge_sort(R)

        i = j = k = 0

        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                arr[k] = L[i]
                i += 1
            else:
                arr[k] = R[j]
                j += 1
            k += 1

        while i < len(L):
            arr[k] = L[i]
            i += 1
            k += 1

        while j < len(R):
            arr[k] = R[j]
            j += 1
            k += 1
    return arr

快速排序

快速排序是对泡沫排序的改进。其核心思想是通过分区操作,使数组的某一部分小于另一部分,从而继续对这两部分进行排序,实现整个序列的有序。

def quick_sort(arr, low, high):
    if low < high:
        pi = partition(arr, low, high)
        quick_sort(arr, low, pi-1)
        quick_sort(arr, pi+1, high)

def partition(arr, low, high):
    pivot = arr[high]
    i = low - 1
    for j in range(low, high):
        if arr[j] < pivot:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i+1], arr[high] = arr[high], arr[i+1]
    return i + 1

堆排序

堆式排序利用二叉堆的数据结构特性进行排序,可以很好地管理数据,特别是对最大值和最小值的访问。

def heapify(arr, n, i):
    largest = i
    l = 2 * i + 1
    r = 2 * i + 2
    if l < n and arr[i] < arr[l]:
        largest = l
    if r < n and arr[largest] < arr[r]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)

def heap_sort(arr):
    n = len(arr)
    for i in range(n//2 - 1, -1, -1):
        heapify(arr, n, i)
    for i in range(n-1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        heapify(arr, i, 0)
    return arr

在sort()函数中,Python还内置了一个高效的Timsort算法。您可以直接使用arrt。.sort或者sorted(arr)在不考虑内部实现细节的情况下,进行快速排序。

对于选择正确的排序策略来说,了解这些算法的时间复杂性和空间复杂性是非常重要的。善用Python排序算法代码,可以让你在数据处理上更加得心应手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超酷的站长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值