快速排序算法 图解

admin 35 0

# 快速排序算法 图解

快速排序是一种常见的排序算法,其核心思想是分而治之,该算法以一个元素为基准,将待排序的序列分为两部分,使得其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后对这两部分分别进行快速排序,整个过程递归进行,直到序列为空或只有一个元素。

下面是用Python实现的快速排序算法的代码:

def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)

# 示例
arr = [3,6,8,10,1,2,1]
print(quicksort(arr)) # 输出 [1, 1, 2, 3, 6, 8, 10]

上述代码中,我们首先检查输入的数组的长度,如果长度小于等于1,则直接返回该数组,我们选择数组中间的元素作为基准,并将数组分为三个部分:小于基准的元素、等于基准的元素和大于基准的元素,对小于基准和大于基准的部分分别进行递归排序,并将结果与等于基准的部分合并起来返回。

下面是用图文并茂的方式解释快速排序算法的实现过程:

1. 我们选择一个元素作为基准,这个元素可以是数组中的任意一个元素,通常我们选择数组中间的元素,在Python代码中,我们使用`pivot = arr[len(arr) // 2]`来选择基准元素。

2. 然后,我们将数组分为三个部分:小于基准的元素、等于基准的元素和大于基准的元素,在Python代码中,我们使用列表推导式来实现这个步骤:`left = [x for x in arr if x < pivot]`、`middle = [x for x in arr if x == pivot]`和`right = [x for x in arr if x > pivot]`。

3. 接下来,我们对小于基准和大于基准的部分分别进行递归排序,在Python代码中,我们使用`quicksort(left)`和`quicksort(right)`来实现递归排序。

4. 我们将等于基准的部分、小于基准的部分和大于基准的部分合并起来返回,在Python代码中,我们使用`return quicksort(left) + middle + quicksort(right)`来实现合并。

通过以上步骤,我们可以实现对一个数组的快速排序,值得注意的是,快速排序算法的时间复杂度为O(nlogn),其中n是数组的长度,在实际应用中,由于其高效性和灵活性,快速排序算法被广泛使用。