当前位置:实例文章 » JAVA Web实例» [文章][数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)

[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)

发布人:shili8 发布时间:2025-01-20 02:36 阅读次数:0

**数据结构 -- 手撕排序算法第六篇**

**递归实现快速排序(集霍尔版本)**

快速排序是一种非常常见的排序算法,它通过分治法将待排序序列分成两个子序列,然后分别对这两个子序列进行排序,最终合并得到有序序列。快速排序的平均时间复杂度为 O(n log n),是最快的稳定性较低的排序算法之一。

在本篇中,我们将使用递归实现快速排序,具体来说,我们将使用集霍尔版本(也称为挖坑法)的方法来实现快速排序。这个方法通过在原数组中创建一个空洞(或称为"坑"),然后分别对左边和右边的元素进行排序,最终填充这个空洞。

**递归实现快速排序**

def quick_sort(arr):
 """
 递归实现快速排序 :param arr: 待排序数组 :return: 排序后的数组 """
 if len(arr) <=1:
 # 如果数组长度小于或等于1,则直接返回数组(因为它已经是有序的)
 return arr else:
 #选择一个基准元素(在本例中,我们使用第一个元素作为基准)
 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,8,3,1,6,4]
print("原始数组:", arr)
sorted_arr = quick_sort(arr)
print("排序后的数组:", sorted_arr)


**输出结果**

原始数组: [5,2,8,3,1,6,4]
排序后的数组: [1,2,3,4,5,6,8]


在本篇中,我们使用递归实现快速排序,具体来说,我们使用集霍尔版本(也称为挖坑法)的方法来实现快速排序。这个方法通过在原数组中创建一个空洞(或称为"坑"),然后分别对左边和右边的元素进行排序,最终填充这个空洞。

我们提供了示例代码,测试了快速排序函数,并展示了输出结果。快速排序是非常常见的排序算法,它通过分治法将待排序序列分成两个子序列,然后分别对这两个子序列进行排序,最终合并得到有序序列。

其他信息

其他资源

Top