分治策略快速排序.ppt
《分治策略快速排序.ppt》由会员分享,可在线阅读,更多相关《分治策略快速排序.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、分治策略快速排序分治策略快速排序现在学习的是第1页,共31页QuickSortlSelect a pivot (partitioning element)lRearrange the list so that all the elements in the positions before the pivot are smaller than or equal to the pivot and those after the pivot are larger than the pivot lExchange the pivot with the last element in the firs
2、t (i.e., sublist) the pivot is now in its final positionlSort the two sublists2现在学习的是第2页,共31页2.5 快速排序问题快速排序问题基本策略是:基本策略是:将数组将数组A1:n分解成两个子数组分解成两个子数组B1:p和和Bp+1:n,使得,使得B1:p中的元素均不大于中的元素均不大于Bp+1:n中的元素,然后分别对这里两个数组中中的元素,然后分别对这里两个数组中的元素进行排序(非降的),最后再把两个排好的元素进行排序(非降的),最后再把两个排好序的数组接起来即可。序的数组接起来即可。pAipAip3现在学习的
3、是第3页,共31页l选取选取A的某个元素的某个元素t=A(s),然后将其他元素重新排列,然后将其他元素重新排列,使,使A(1:n)中所有在中所有在t以前出现的元素都小于或等以前出现的元素都小于或等于于t,而在,而在t之后出现的元素都大于或等于之后出现的元素都大于或等于t。A(1)A(2)A(s-1)A(s)A(s+1)A(n)t划分元素划分元素A(n)A(k)tA(j)A(2)A(1)经过一次划分后经过一次划分后每个元素都小于或等于每个元素都小于或等于t每个元素都大于或等于每个元素都大于或等于t2.5 快速排序问题快速排序问题4现在学习的是第4页,共31页The partition algor
4、ithm5现在学习的是第5页,共31页算法步骤算法步骤l分解分解(Divide):以以ap为基准元素将为基准元素将ap:r划分成划分成3段段ap:q-1,aq和和aq+1:r,使得使得ap:q-1中任何一中任何一个小于等于个小于等于aq,下标下标q在划分过程中确定。在划分过程中确定。l递归求解递归求解(conquer):通过递归调用快速排序算法通过递归调用快速排序算法分别对分别对ap:q-1和和aq+1:r进行排序。进行排序。l合并合并(Merge):由于对由于对ap:q-1和和aq+1:r的排序是的排序是就地进行的,所以在就地进行的,所以在ap:q-1和和aq+1:r都已排好都已排好的序后步
5、需执行任何计算的序后步需执行任何计算ap:r就已排好序。就已排好序。2.5快速排序问题快速排序问题6现在学习的是第6页,共31页快速排序快速排序templatevoid QuickSort(Type a , int p,int r) if(pr) int q=Partition(a,p,r); QuickSort(a,p,q-1);/对左半段排序对左半段排序 QuickSort(a,q+1,r);/对右半段排序对右半段排序 a的起始位置的起始位置a的终止位置的终止位置Partition函数负责将函数负责将a进行一次分割,返回分进行一次分割,返回分割元素的位置割元素的位置快速排序问题快速排序问题
6、2.5快速排序问题快速排序问题7现在学习的是第7页,共31页划分过程划分过程lPartition的过程中,首先要选择一个元素,根的过程中,首先要选择一个元素,根据其值划分数组。称该元素为中轴。据其值划分数组。称该元素为中轴。l选择中轴有许多不同的策略,我们使用最简单选择中轴有许多不同的策略,我们使用最简单的策略,选择第一个元素:的策略,选择第一个元素:s = ap。快速排序问题快速排序问题2.5快速排序问题快速排序问题8现在学习的是第8页,共31页划分举例划分举例(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)ip657075808560555045+29654575808560
7、555070+38654550808560557570+47654550558560807570+56654550556085807570+65604550556585807570+快速排序问题快速排序问题2.5快速排序问题快速排序问题 Figure 2-19现在学习的是第9页,共31页划分的过程划分的过程l使用一种两次扫描子数组的方法使用一种两次扫描子数组的方法:一次是一次是从左到右从左到右,另一次是另一次是从右到左从右到左,每次都把子数组的元素和中轴进行比较。每次都把子数组的元素和中轴进行比较。l从左到右的扫描从左到右的扫描从第二个元素从第二个元素开始开始,希望小于中轴的元素位于希望小于中
8、轴的元素位于子数组的第一部分,扫描会忽略小于中轴的元素,子数组的第一部分,扫描会忽略小于中轴的元素,直到遇到第直到遇到第一个大于等于中轴的元素才会停止一个大于等于中轴的元素才会停止。l从右到左的扫描从从右到左的扫描从最后一个元素最后一个元素开始,因为我们希望大于中轴开始,因为我们希望大于中轴的元素位于子数组的第二部分,扫描会忽略大于中轴的元素,的元素位于子数组的第二部分,扫描会忽略大于中轴的元素,直到遇到第一个小于等于中轴的元素才会停止。直到遇到第一个小于等于中轴的元素才会停止。快速排序问题快速排序问题2.5快速排序问题快速排序问题10现在学习的是第10页,共31页P全部全部=p=pij全部全
9、部=p=p全部全部=p=p=p全部全部=pPij快速排序问题快速排序问题如果扫描指针如果扫描指针i和和j不相交,不相交,ij, 把中轴和把中轴和Aj交换,得到该数组的一个分区。交换,得到该数组的一个分区。如果扫描指针如果扫描指针i指向同一元素,指向同一元素,ij,被指向元素的值一定等于,被指向元素的值一定等于p。2.5快速排序问题快速排序问题11现在学习的是第11页,共31页划分程序划分程序 template int Partition(Type a ,int p,int r) int i = , j = ; Type x = ; while( true ) while( a +i x );
10、if( ) break; Swap( a i , a j ); a p = ; a j = ; return j;快速排序问题快速排序问题pr+1a p i = ja j x左侧扫描指针起始左侧扫描指针起始右侧扫描指针起始右侧扫描指针起始中轴元素中轴元素移动左侧扫描指针移动左侧扫描指针移动右侧扫描指针移动右侧扫描指针2.5快速排序问题快速排序问题该算法是否有问题?该算法是否有问题?12现在学习的是第12页,共31页快速排序问题快速排序问题例:排列例:排列 5,3,1,9,8,2,4,70 1 2 3 4 5 6 7 i j5 3 1 9 8 2 4 7 i j5 3 1 9 8 2 4 7 i
11、 j5 3 1 4 8 2 9 7 i j5 3 1 4 8 2 9 7 i j5 3 1 4 2 8 9 7 j i5 3 1 4 2 8 9 7 2 3 1 4 5 8 9 7 i j2 3 1 4 i j2 3 1 4 i j2 1 3 4 j i2 1 3 41 2 3 41 i j 3 4 j i 3 4 4 i j8 9 7 j i8 7 97 8 9792.5快速排序问题快速排序问题13现在学习的是第13页,共31页问题:问题:l扫描停止的时候扫描停止的时候i和和j有几种关系,每种代表哪有几种关系,每种代表哪种情况?种情况?l下标下标i和和j会不会超出会不会超出a的下标界?的下标
12、界?l该排序算法是否稳定?该排序算法是否稳定?快速排序问题快速排序问题2.5快速排序问题快速排序问题14现在学习的是第14页,共31页Efficiency of QuickSortlBest case: split in the middle ( n log n) lWorst case: sorted array! ( n2) lAverage case: random arrays ( n log n)lImprovements:lbetter pivot selection: median of three partitioning avoids worst case in sorted
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分治 策略 快速 排序
限制150内