75. Clasificación del color.

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

 

Supongo que te gusta

Origin www.cnblogs.com/zhaohuan1996/p/12749674.html
Recomendado
Clasificación