一、快速排序的递归探寻
1.思路
左断开结果与右断开结果加上突兀根如何实现上一层的结果:

左断开有序+右断开有序加突兀根实现它比左部分都大、它比右部分都小就可以实现上一层的有序
2.书写
书写时是突兀根先实现再递归实现左右断开结果:
书写时反着来先实现突兀根一个节点左边都比都比它小、右边都比它大,再用递归实现它断开的左右有序结果
3.搭建
突兀根从底层向上的回搭搭建二叉树:

3.1设计过掉不符情况(在最底层时)
- if(array == null) return, 没有元素不用排,下面是有元素
- if(start == end) return,只有一个元素不用排,下面是多个元素
- if(start > end) return,排不了不要排的,之后下面是符合正常情况的多个元素
3.2查验能实现基础结果(在最底层往上点时)
当突兀根来到倒数第二层,当共有两个元素下突兀根去作为在上层的会去操作实现上层与下两层结果的表示连接时,左边、右边都是有序的结果,要实现它这层的有序结果要突兀根去操作实现为它的值比左边的都大、比右边的都小,操作具体实现为与 1 节点的值进行交换完成突兀根的实现操作,实现了突兀根所在的上层结果与下层左右两断开结果的连接表示,说明突兀根的实现操作在底层确实是能完成基础排序的
3.3跳转结果继续往上回搭
4.实质
用二叉树递归实现排序实质上还是确定元素大小排在的数组位置递归完一个个来排的:
它排的位置左边都比它小、右边都比它大,它排的位置就是它在数组中排的大小位置,同时也确定着其它元素的相对大小排位位置,所以最后一层元素不去找基准排位置也是相对已确定下来的不用去排,所以 if(start == end)return 的
二、快速排序的基准排序
待排序元素 将其所在的待排序区域 调整划分成 以它为基准值 左边都比它小、右边都比它大的 两部分,并将它基准值 放入两部分的中间 就完成了此元素的排序
1.双路双向交换铺(Hoare 法)
1.1原理
要去排的元素基准值 在待排序区域里面 任意取好后,在待排序区域左右两端 往内相遇铺路,右端往内铺 遇小不符 等停,左端往内铺 遇大换过去 交换,直至路头遇相等,此时路头位置 即基准元素 大小排在的位置,最后将基准元素交换过去 就完成了此元素的排序





