当前位置:
文档之家› 快速排序递归详解流程图(大框架)
快速排序递归详解流程图(大框架)
函数Sortlist
(1)
划分; //result{27,38,13},49,{76,97,65,49^} Sortlist( Sortlist(左); 0, 1, 2, 3, 4, 5, 6, 7 Sortlist( Sortlist(右);
(2) Input: {27,38,13},[0,2]
(9)
Input:{49},[4,3]
结束(4>=3),(7)出栈
(8) Input:{65},[5,5]
Input:{97}, [7,7]
结束(5>=5), sortlist(8)出栈, sortlist(6)出栈 结束(7>=7), (9)出栈,(5)出栈, (1)出栈
划分; //result{13},27,{38}, Sortlist( Sortlist(左); 0, 1, 2 Sortlist{76,97,65,49^},[4,7] 划分; //result{49^,65},76,{97}, Sortlist( Sortlist(左); 4, 5, 6, 7 Sortlist( Sortlist(右);
(3)
(6)
Input: {49^,65},[4,5]
Input:{13},[0,0]
结束(0>=0), Sortlist(3)出栈
(4) Input: {38},[2,2]
结束(2>=2), Sortlist(4)出栈 Sortlist(2)出栈
划分; //result 49^,{65}, Sortlist( Sortlist(左); 4, 5 Sortlist( (7) Sortlist(右);
快速排序流程----图解
序:由于心里没有全面的调用经过图序,画了一个以供回忆。 这个图解,还原出快速排序的调用架构图。为了保证架构完整,去掉了划分过程 分析,直接用了划分后的结果。 说明如下: 1. sortlist函数原型为:Void sortlist(int a[], int l, int h); 图中input的解释:假设注释input为: {54, 37, 26}, [0,2],则表示low为0, high为2 2.注意快速排序,最核心的几样东西: 2.1 初始序列,low, high边界。(见每次的input) 2.2 划分过程。(图中没表现出来) 2.3 划分后得到的: 分界点,左右两个子序列。(见划分后的注释://result{13},27,{38} ) 2.4 流程:像二叉树。有一个根,生成了第1层左叶子,右叶子,它们分别生出了第2 层左右叶子,依次发展下去。每次都是最上层的子叶子先处理完(左边的叶子处理干净 了(出栈后),再去处理右边的叶子,然后该子叶子处理完)。然后它再作为父叶子的左右叶 子,依次处理,出栈。一层层出栈,最终返回到根,处理、出栈。整个过程完毕。这 样把每个子序列都排好序了。没学过二叉树,描述的可能不到位,自己总结用的,希 没学过二叉树, 没学过二叉树 描述的可能不到位,自己总结用的, 望有高手能给个宝贵意见啥的,一起分享,讨论进步^_^ 望有高手能给个宝贵意见啥的,一起分享,讨论进步 3. 图中红色字:表示分界点的坐标。