1. 主要思想
快速排序的思想其实很简单,就是分治+递归。
讲故事的方法比较适合描述快速排序的过程,假设有一队人,身高大小不一,先选出一个队长,然后队长说比我低的到我左边去,比我高的到我右边去。partition。
站好后,队长在分别给他左右两边的队员说,你们分别去选出各自的队长,然后执行我刚才的操作。
如此递归下去,直到要排序的队列长度为1就可以停止了。此时队列就是有序的。
快排实现的关键是partition,快排实现的关键是partition,快排实现的关键是partition,重要的事情说三遍!!!
partition要解决的问题是,给定一个数组arr[]和数组中任意一个元素a,重排数组使得a左边都小于它,右边都不小于它,这样经过一次partition后,元素a就放在了正确的位置。
2. step by step
假设要排序的序列为a
1)先随机在序列a中选取一个元素pivot = a[i]
2)将小于a[i]的元素移动到a[i]的左边,大于a[i]的元素移到a[i]的右边
3)递归的对a[i]的左