(笔记)快速排序
发布人:shili8
发布时间:2025-02-07 23:55
阅读次数:0
**快速排序笔记**
快速排序是一种常见的排序算法,属于分治类算法。它通过选择一个基准值,将数据分成两部分,分别是小于基准值的数据和大于基准值的数据,然后递归地对这两部分进行排序。
**快速排序流程**
1. **选择基准值**:从数据中选择一个基准值。
2. **分区**:将数据按照基准值分成两部分,分别是小于基准值的数据和大于基准值的数据。
3. **递归排序**:对小于基准值的数据和大于基准值的数据分别进行快速排序。
**快速排序算法**
def quick_sort(arr): # 如果数组长度为0或1,则直接返回 if len(arr) <=1: return arr #选择基准值(本例中使用第一个元素) pivot = arr[0] # 分区,将数据分成两部分 less_than_pivot = [x for x in arr[1:] if x <= pivot] greater_than_pivot = [x for x in arr[1:] if x > pivot] # 递归排序 return quick_sort(less_than_pivot) + [pivot] + quick_sort(greater_than_pivot)
**快速排序分析**
* **时间复杂度**:快速排序的平均时间复杂度为 O(n log n),但在最坏的情况下(数据已经有序或逆序)可以退化到 O(n^2)。
* **空间复杂度**:快速排序的空间复杂度为 O(log n),因为递归函数会占用一定的栈空间。
**优化**
为了避免快速排序在最坏的情况下退化到 O(n^2),可以使用以下方法:
1. **随机选择基准值**:将基准值随机选择,减少数据已经有序或逆序的可能性。
2. **三向切分**:将数据分成三个部分,小于基准值、等于基准值和大于基准值,然后递归地对这三个部分进行排序。
**示例**
arr = [5,2,8,3,1,6,4] print(quick_sort(arr)) # 输出:[1,2,3,4,5,6,8]
快速排序是一种常见的排序算法,具有较好的平均时间复杂度和空间复杂度。但是,在最坏的情况下,它可能会退化到 O(n^2),因此需要合理地选择基准值或使用优化方法来避免这种情况。