算法介绍
- 选择一个基准元素,
通常选择第一个元素或者最后一个元素
- 通过一趟排序将待排序的列表分割成独立的两部分,其中一部分列表的元素值均比基准元素值小。另一部分列表的元素值比基准值大。
- 此时基准元素在其排好序后的正确位置。
- 然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
图解:
- pivot为基准元素
实现:
def quick_sort(lists, left, right): %其中left和right参数是指所选列表的首元素和尾元素索引
if left >= right:
return lists
key = lists[left]
low = left
high = right
while left < right:
while left < right and lists[right] >= key:
right -= 1
lists[left] = lists[right]
while left < right and lists[left] <= key:
left += 1
lists[right] = lists[left]
lists[right] = key
quick_sort(lists, low, left - 1)
quick_sort(lists, left + 1, high)
return lists
test_lists = [5, 4, 6, 8, 3, 6, 2]
right_sort = quick_sort(test_lists, 0, 6)
print(right_sort)
递归与迭代
递归
递归常被用来描述以自相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(A调用A)
迭代
重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B)
递归是一个树结构
,从字面可以其理解为重复“递推”和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历。迭代是一个环结构
,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代直到到达结束状态。- 理论上递归和迭代时间复杂度方面是一样的,但实际应用中(函数调用和函数调用堆栈的开销)递归比迭代效率要低。
快速排序用到了递归的思想
图解:
参考链接:
https://www.jianshu.com/p/32bcc45efd32