c语言编程笔录

首页 >   > 笔记大全

笔记大全

怎么使用Python进行高效的排序操作

更新时间:2023-07-13

Python内置排序函数

Python的内置排序函数非常方便,可以对列表或其他可迭代对象进行排序。内置函数包含sorted()和sort()。sorted()函数可对任何可迭代对象进行排序并返回一个新的列表,而sort()函数则原地对列表进行排序。

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
numbers.sort()
print(sorted_numbers)
print(numbers)

上述代码将对列表numbers进行排序,sorted()函数返回新的已排序列表sorted_numbers,而sort()函数原地对原列表numbers进行排序。输出结果为[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]和[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。

冒泡排序

冒泡排序是一种基本的排序算法。它比较相邻的元素,并在必要时交换它们的位置,以便将序列按升序排列。每次冒泡操作将会将待排序序列中最大的元素“冒泡”到序列的末尾。由于冒泡排序的操作只涉及相邻的元素,因此它的空间复杂度为O(1)。

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

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = bubble_sort(numbers)
print(sorted_numbers)

上述代码通过定义一个bubble_sort()函数实现了冒泡排序。通过嵌套循环,内层循环比较并交换相邻的元素,直到序列有序。最终将排序后的序列返回。输出结果为[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。

快速排序

快速排序是一种基于分治思想的排序算法。它通过选取一个元素作为基准,将序列分成两个部分,其中一个部分的所有元素均小于基准,而另一个部分的所有元素均大于基准。然后递归地对这两个部分进行排序,最终将整个序列排序。快速排序的时间复杂度为O(nlogn)。

def quick_sort(items):
    if len(items) <= 1:
        return items
    pivot = items[0]
    left = []
    right = []
    for item in items[1:]:
        if item < pivot:
            left.append(item)
        else:
            right.append(item)
    return quick_sort(left) + [pivot] + quick_sort(right)

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = quick_sort(numbers)
print(sorted_numbers)

上述代码通过定义一个quick_sort()函数实现了快速排序。通过选取序列的第一个元素作为基准,将序列分成两个部分,然后递归地对这两个部分进行排序。最终将排序后的序列返回。输出结果为[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。

堆排序

堆排序是一种基于堆(完全二叉树)的排序算法。它先将序列构建成一个最大堆或最小堆,然后依次将堆顶元素(即最大值或最小值)与堆末尾的元素交换,再调整堆以维护堆的性质。重复这个过程,最终就可以得到一个有序序列。堆排序的时间复杂度为O(nlogn)。

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

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

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = heap_sort(numbers)
print(sorted_numbers)

上述代码通过定义一个heapify()函数和一个heap_sort()函数实现了堆排序。heapify()函数用于维护堆的性质,heap_sort()函数则将待排序序列转换成最大堆,并通过交换堆顶元素和堆末尾元素的方式将序列从大到小排序。输出结果为[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。