|
上一页 下一页
4、快速排序执行过程
快速排序执行的全过程可用递归树来描述。
分析:
(1)递归执行的路线如图中带箭头的包络线所示。
(2) 递归树上每一结点左旁方括号表示当前待排序的区间,结点内的关键字是划分的基准关键字
注意:
叶结点对应的子区间只有一个关键字,无须划分,故叶结点内没有基准关键字
(3) 划分后得到的左、右两个子区间分别标在该结点的左、右两个孩子结点的左边方括号内。
【例】根结点左旁方括号[49,38,65,97,76,13,27,49]表示初始待排序的关键字,根内的49表示所选的划分基准记录的关键字,划分结果是[27,28,13]49[76,97,65,49_],其左右子区间分别标在根结点的两个孩子的左边。
(4) 每个分支结点右旁圆括号中的内容表示对该结点左旁区间的排序过程结束之后返回的结果。它是其左右孩子对应的区间排序完成之后,将左右孩子对应的排序结果分别放在该分支结点的关键字前后所得到的关键字序列。
【例】分支结点76的左右孩子对应的区间排序后的结果分别是(49_,65)和(97),将它们分别放在76的前后即得(49,65,76,97),这是对结点76左旁区间[76,97,,65,49]排序的结果。
(5) 算法的执行顺序是递归树中的箭头顺序,实际上当把划分操作视为访问结点的操作时,快速排序的执行过程相当于是先序遍历其递归树。
注意:
任何递归算法均可用递归树来描述其执行过程。
5、快速排序各次划分后的状态变化
[49 38 65 97 76 13 27 49]
//初始关键字
[27 38 13]
49 [76 97 65 49]
//第1次划分完成之后,对应递归树第2层
[13]
27 [38]
49 [49 65]
76 [97]
//对上一层各无序区划分完成后,对应递归树第3层
13 27 38 49 49 [65]
76 97 //对上一层各无序区划分完成后,对应递归树第4层
13 27 38 49 49 65 76 97 //最后的排序结果
上一页 下一页
|