Método uno:
Dos escaneos:
Escanee la primera pasada y registre el número de 0, 1, 2;
Escanee la segunda pasada y vuelva a llenar la matriz.
/ * * / #include <stdio.h> #include <malloc.h> #include < string .h> #include <stdlib.h> #include <math.h> #include < string .h> #include <iostream > void sortColors ( int * nums, int numsSize) { int i, j, k, n = numsSize, t; i = j = k = 0 ; para (t = 0 ; t <n; t ++ ) { if (nums [t] == 0 ) i ++ ; Si(nums [t] == 1 ) j ++ ; if (nums [t] == 2 ) k ++ ; } t = 0 ; while (t < n) { printf ( " 1 \ n " ); mientras que (i) { nums [t] = 0 ; i - ; t ++ ; } while (j) { nums [t] = 1 ; j - ; t ++; } while (k) { nums [t] = 2 ; k - ; t ++ ; } } } int main () { int * nums, numsSize = 6 , a [ 6 ] = { 2 , 0 , 2 , 1 , 1 , 0 }, i; nums = ( int *) malloc ( sizeof ( int ) * 6 ); nums =una; sortColors (nums, numsSize); para (i = 0 ; i <numsSize; i ++ ) { printf ( " % d " , nums [i]); } // printf ("% d \ n", rs); devuelve 0 ; }
Método dos:
La cuestión de la bandera holandesa es en realidad una vía rápida de tres puntos.
Use p0 para registrar el límite más a la derecha de 0; cur para registrar la posición de 1; p2 para registrar el límite a la izquierda de 2.
1. Inicialización
p0 = 0 ; cur = 0 ; p2 = numsSize-1 ;
2. Ciclo (cur <= p2)
Si nums [cur] = 0, intercambie nums [cur] y nums [p0], cur ++, p0 ++;
Si nums [cur] = 1, cur ++;
Si nums [cur] = 2, intercambie nums [cur] y nums [p2], p2--;
/ * * / #include <stdio.h> #include <malloc.h> #include < string .h> #include <stdlib.h> #include <math.h> #include < string .h> #include <iostream > intercambio nulo ( int nums [], int i, int j) { int t = nums [i]; nums [i] = nums [j]; nums [j] = t; } void sortColors ( int * nums, int numsSize) { intp0 = 0 , p2 = numsSize- 1 , cur = 0 ; while (cur <= p2) { if (nums [cur] == 0 ) { swap (nums, p0, cur); p0 ++ ; cur ++ ; } else if (nums [cur] == 2 ) { swap (nums, p2, cur); p2 - ; } else { cur ++ ; } } } int main () { int* nums, numsSize = 6 , a [ 6 ] = { 2 , 0 , 2 , 1 , 1 , 0 }, i; nums = ( int *) malloc ( sizeof ( int ) * 6 ); nums = a; sortColors (nums, numsSize); para (i = 0 ; i <numsSize; i ++ ) { printf ( " % d " , nums [i]); } // printf ("% d \ n", rs); devuelve 0 ; }