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

快速排序算法实现:Python中的sorted函数使用技巧

发布时间:2023-06-17 04:39:46

快速排序算法是一种比较常见和实用的排序算法,在算法竞赛中也经常会用到。它的时间复杂度是$O(n\log n)$,比冒泡排序和选择排序等时间复杂度为$O(n^2)$的排序算法更快。

快速排序的核心思想是分治法,可以用递归的方式实现。它的基本步骤如下:

1. 从数列中挑出一个元素,称为基准(pivot)。

2. 将数列分成两部分,小于等于基准的元素放在左边,大于基准的元素放在右边。

3. 对左右两部分分别递归地进行快速排序。

下面是一个简单的Python实现:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[0]
    left = [x for x in arr[1:] if x <= pivot]
    right = [x for x in arr[1:] if x > pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)

这段代码中,我们首先判断了待排序数组是否为空或只有一个元素,如果是则直接返回。否则,我们选择第一个元素作为基准,将数组分成左右两部分,并递归地对左右两部分进行快速排序,最终将左半部分、基准元素、右半部分拼接起来。

然而,在Python中,还有一个更简单的方式来对数组进行快速排序——使用内置函数sorted。sorted可以直接对list、tuple、str和iterable对象进行快速排序,并返回一个新的排序后的list。

arr = [3, 7, 1, 9, 2, 0, 5, 4, 8, 6]
sorted_arr = sorted(arr)
print(sorted_arr)

这段代码中,我们定义了一个待排序数组arr,然后使用sorted进行排序,并将结果存放在sorted_arr中。最后输出排序后的结果。

sorted函数还支持自定义排序规则。例如,我们可以根据字符串长度进行排序:

words = ['apple', 'orange', 'watermelon', 'banana']
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)

这段代码中,我们定义了一个待排序字符串数组words,然后使用sorted根据字符串长度进行排序,并将结果存放在sorted_words中。最后输出排序后的结果。

需要注意的是,sorted函数虽然可以直接对原数组进行排序,但它返回的是一个新的排好序的list,原数组并没有被修改,如果要修改原数组,需要使用sort方法。

总之,快速排序是一种非常实用的排序算法,不仅在编程竞赛中得到广泛应用,也经常会被用于日常开发。在Python中,我们可以通过递归方式实现快速排序,也可以使用内置函数sorted进行快速排序,并支持自定义排序规则。