Pregunta sobre la bandera holandesa
1. Descripción del problema
![[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-5ryPCHtm-1603712259610)(%E8%8D%B7%E5%85%B0 %E5%9B%BD% E6%97%97%E9%97%AE%E9%A2%98.assets/image-20201026193457980.png)]](https://img-blog.csdnimg.cn/20201026193804945.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzcyNzE5,size_16,color_FFFFFF,t_70#pic_center)
2. Solución
![Insertar descripción de la imagen aquí](https://img-blog.csdnimg.cn/20201026193817545.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MzcyNzE5,size_16,color_FFFFFF,t_70#pic_center)
- Si el número actual cur<número, entonces ++less, cur++
- Si el número actual cur>número, entonces cur,–más
- Si el número actual cur=número, entonces cur++
3. Código
public class NetherLandsFlag {
public static int[] partition(int[] arr ,int L ,int R ,int number){
int less = L - 1;
int more = R ;
int cur = L;
while (cur < more){
if (arr[cur] < number){
swap(arr,++less,cur++);
}
else if (arr[cur] > number){
swap(arr,cur,--more);
}
else {
cur++;
}
}
return new int[]{
less+1,more-1};
}
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
public static int[] generateArray() {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 5);
}
return arr;
}
public static void printArray(int[] arr) {
if (arr == null) {
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] test = generateArray();
printArray(test);
int[] res = partition(test, 0, test.length - 1, 1);
printArray(test);
System.out.println(res[0]);
System.out.println(res[1]);
}
}