• Index

划分数组

Last updated: ... / Reads: 439 Edit

代码

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;
  }
}


Comments

Make a comment

  • Index