这里介绍快速排序使用到的两种分割算法。
对于快速排序而言,先选定一个枢轴元素,以枢轴元素为基准比枢轴元素小的元素放在枢轴元素的左边,比枢轴元素大的元素放在枢轴元素的右边。这就是一次分割过程。
1,先介绍第一种分割算法
该算法是《算法导论》中描述的PARTITION过程。这个分割的思想应该有很多应用,比如应用到快速排序中,再比如应用到如果获取中位数(或者给定一组数,找出其中第K小的元素)
该分割算法的思想是,始终选定数组中的最后一个元素作为枢轴元素,设置指针 i 初始值为数组起始元素索引减1,设置指针 j 由数组下标从低到高扫描整个数组,若遇到的元素小于枢轴元素则 i 自增然后交换 i 数组元素的值和i 数组元素的值;若遇到的元素大于 枢轴元素则i指针不动,只有j指针自增。此算法的时间复杂度为O(n),空间复杂度为O(1)。
具体的JAVA实现代码如下,算法伪代码参考《算法导论》

本文探讨快速排序中两种分割算法的实现,重点讲解《算法导论》中描述的第一种算法。该算法以数组最后一个元素为枢轴,通过两个指针i和j进行扫描,最终实现将数组分为两部分,小于枢轴的元素在枢轴左侧,大于枢轴的在右侧。文章提供具体的Java代码实现和快速排序的辅助方法。
最低0.47元/天 解锁文章
1497

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



