es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

División de Array por elemento dado X

Estoy tratando de encontrar la partición del array, en base a una condición que verifica la variable x; “si son menores a x, estarán de un lado, sino estarán del otro”. Pero mi código necesita algunas correcciones.

Aquí no puedo encontrar el error, te agradecería si me ayudas.

Código:

“`cpp
#include<iostream>

using namespace std;

int partition(int arr[], int n, int x) {
for(int i=0; i<n; )="" {="" if(arr[i]="" <="" x)="" {="" i++;="" }="" else="" if(arr[i]="=" x)="" {="" int="" temp="arr[i];" arr[i]="arr[n];" arr[n]="temp;" i–;="" }="" else="" if(arr[i]=""> x) {
int temp = arr[i];
for(int j = i; j<n; j++)="" {="" arr[j]="arr[j+1];" }="" arr[n]="temp;" i–;="" }="" }="" return="" 0;="" }="" int="" main()="" {="" int="" n;="" cin="">> n;
int arr[n];
for(int i=0; i<n; i++)="" {="" cin="">> arr[i];
}
int x;
cin >> x;

<pre><code>partition(arr, n, x);

for(int i=0; i<n; i++)="" {="" cout="" <<="" arr[i]="" <<="" "\t";="" }="" return="" 0;="" }="" “`=””> Entrada >> array={2,10,15,1,3,15} ,x=10

Esperado << {2,1,3,10,15,15}

Obtengo << nada.</n;></n;></n;></n;>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error en el código proporcionado es que el índice ‘n’ en la función de partición siempre apunta al último elemento del array. En la segunda declaración else if, donde arr[i] == x, ‘n’ en realidad debería ser ‘n-1’, ya que el último elemento del array ya ha sido colocado correctamente en la iteración anterior. Otro error está en la tercera declaración else if, donde el bucle para intercambiar elementos debería comenzar desde ‘n-1’ en lugar de ‘i’.

    Aquí está el código corregido:

    “`c++
    #include
    using namespace std;

    int partition(int arr[], int n, int x) {
    for(int i = 0; i < n;) {
    if(arr[i] < x) {
    i++;
    }
    else if(arr[i] == x) {
    int temp = arr[i];
    arr[i] = arr[n-1];
    arr[n-1] = temp;
    n–;
    }
    else if(arr[i] > x) {
    int temp = arr[i];
    for(int j = i; j < n-1; j++) {
    arr[j] = arr[j+1];
    }
    arr[n-1] = temp;
    n–;
    }
    }
    return n;
    }

    int main() {
    int n;
    cin >> n;
    int arr[n];
    for(int i = 0; i < n; i++) {
    cin >> arr[i];
    }
    int x;
    cin >> x;

    int new_n = partition(arr, n, x);
    
    for(int i = 0; i < new_n; i++) {
        cout << arr[i] << "\t";
    }
    return 0;
    

    }
    “`

    Nota: El código corregido devuelve el nuevo tamaño del array después de la partición como ‘new_n’, que se utiliza en el bucle final para imprimir solo los elementos recién particionados del array.

Comments are closed.