快速排序递归实现和非递归实现(详解)
发布人:shili8
发布时间:2025-01-27 06:42
阅读次数:0
**快速排序算法**
快速排序是一种常见的排序算法,属于分治类算法。它通过选择一个基准值,将数据集分成两个子集:小于基准值的元素和大于基准值的元素,然后递归地对这两个子集进行排序。
**快速排序递归实现**
### 递归函数
def quick_sort(arr): """ 快速排序递归实现 :param arr: 需要排序的数组 :return: 排序后的数组 """ # 如果数组长度小于1,直接返回,因为已经是有序的了 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)
###例子
arr = [5,2,9,6,3,1,8,4,7] print(quick_sort(arr)) # 输出:[1,2,3,4,5,6,7,8,9]
**快速排序非递归实现**
### 非递归函数
def quick_sort_non_recursive(arr): """ 快速排序非递归实现 :param arr: 需要排序的数组 :return: 排序后的数组 """ # 如果数组长度小于1,直接返回,因为已经是有序的了 if len(arr) < 1: return arr # 初始化栈 stack = [] # 将数组和下标压入栈中 stack.append((arr,0)) while stack: # 取出栈顶元素 arr, low = stack.pop() # 如果子数组长度小于1,直接返回,因为已经是有序的了 if len(arr) < 2: 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] # 将左右两个子集压入栈中 stack.append((left,0)) stack.append((right,0)) return []
###例子
arr = [5,2,9,6,3,1,8,4,7] print(quick_sort_non_recursive(arr)) # 输出:[1,2,3,4,5,6,7,8,9]
**总结**
快速排序算法是一种常见的排序算法,属于分治类算法。它通过选择一个基准值,将数据集分成两个子集:小于基准值的元素和大于基准值的元素,然后递归地对这两个子集进行排序。
本文提供了快速排序递归实现和非递归实现的代码示例,包括详细的注释和解释。快速排序算法具有较好的时间复杂度(O(n log n)和空间复杂度(O(log n),适合大规模数据的排序需求。
希望本文对您有所帮助!