36 数组的partition调整
Table of Contents

ac

区域交换

import java.util.Scanner;


public class Main {

    public static Scanner sc = new Scanner(System.in);

    static void swap(int[] arr, int i, int j){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    public static void main(String[] args) {
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i] = sc.nextInt();
        }
        int u = 0; // A 区域, u代表最后一个位置
        int i = 1; // B 区域,i代表开始的位置
        while (i != n){
            // i 向右移动
            if(arr[i++] != arr[u]){ // i位置不等于u位置,那么u位置可以增加了
                u ++;
                // u 加了1的位置, 跟i位置交换
                swap(arr, u, i-1);
            }
        }
        for(int k=0;k<n-1;k++){
            System.out.print(arr[k] + " ");
        }
        System.out.println(arr[n-1]);
    }
}
/*
16
1 2 2 2 3 3 4 5 6 6 7 7 8 8 8 9

1 2 3 4 5 6 7 8 9 6 2 7 2 8 8 3
*/