代码
package partition;
import java.util.Arrays;
/**
* 划分数组:左边数据比基准数据小,右边数据比基准数据大
*
* @author javaself
* @date 2023/7/26
*/
public class PartitionArray2 {
/**
* 划分数组
*
* @param a
* @param pivot 基准数据
* @return int 基准数据的下标:可以把左指针作为基准数据的下标
* @author javaself
*/
public int partitionArray(int[] a, int pivot){
//基于双指针
int left = 0;
int right = a.length - 1;
//循环交换数据
while (left < right){ //不是<=,而是=。为什么?因为现在是交换两个数据,如果下标一样,就不用再交换了。
System.out.println(Arrays.toString(a));
//找到大数据
while (left<right && a[left]<pivot){ //如果小,就自增,直到找到大数据
left++;
}
//找到小数据
while (left<right && a[right]>pivot){ //
right--;
}
System.out.println("left:"+left+" right:"+right);
if (left < right) {
//交换数据
int temp = a[left];
a[left] = a[right];
a[right] = temp;
left++; //交换数据之后,指针必须也要自增和自减
right--;
}
System.out.println(Arrays.toString(a));
}
return left;
}
}