以 12,11,15,23,8,10为例
随机选取一个基准,我是习惯性选取第一个元素,以12为基准
一、以12为基准
由于选的基准元素是左边的,所以最右边开始遍历比较。10小于12,则a[i]=a[j]
然后,从左遍历比较,由于刚刚交换了元素,所以L前进一步,即++i
11小于12,则不动。L继续前进一步,++i
15大于12,则a[j]=a[i]
由于刚刚交换了元素,则R后退一步,即--j
8小于12,则把8放左边,a[i]=a[j]
由于刚刚交换了元素,所以L前进一步,即++i
15大于12,则a[j]=a[i]
由于刚刚交换了元素,则R后退一步,即--j
此时i=j,则退出whlie循环。a[i]=tmp,即a[i]=12。
由于12的左边区间和右边区间距离均不为 1。所以要对左边部分和右边部分继续排序!
先排左边,10,11,8
二、以10为基准
从右开始遍历,8小于10,则把8移到左边,a[i]=a[j]
由于发生了元素交换,则开始从左边遍历,L前进一步,++i
11大于10,则将11移到右边,a[j]=a[i]
由于发生了元素交换,则开始从右边遍历,R后退一步,--j
此时i=j,则退出whlie循环。a[i]=tmp,即a[i]=10。
由于10的左边区间和右边区间距离均为 1,所以元素已经是有序状态!
再排右边,23,15
三、以23为基准
15小于23,将15移到左边,a[i]=a[j]
由于发生了交换,则L前进一步,++i
此时i=j,则退出whlie循环。a[i]=tmp,即a[i]=23。
由于23的左边区间为 1,所以元素已经是有序状态!
此时,数组中的元素为有序状态了。

本文详细解析了快速排序算法,通过实例演示了以不同基准元素进行划分的过程,包括12, 10, 和23,展示了基准选择对排序效果的影响。重点在于递归策略和分区操作的优化。

被折叠的 条评论
为什么被折叠?



