Reorganización de un array

De Ejercicios

Contenido

Enunciado

Realizar un procedimiento que permita reestructurar un array a partir de un elemento dado según el siguiente ejemplo:

Array inicial: 3-20-8-40
Valor de reorganización: 8

Array final: 8-40-3-20

Soluciones

Diseño en pseudocódigo

PROCEDIMIENTO Reorg(VAR V: ARRAY DE ENTEROS, n:ENTERO ,x: ENTERO)
ENTRADAS:
  V: ARRAY DE REALES  (Array que se quiere reorganizar. El array empieza en la posición 1)
  n: ENTERO           (Número de elementos del array V)
  x: ENTERO           (Elemento de reorganización)
SALIDAS: 
  V: ARRAY DE REALES  (Array reorganizado)
VARIABLES: 
  W: ARRAY DE REALES
  i, k: ENTEROS
INICIO
   (Localizar el elemento de reorganización en el array)
   i <-- 1
   MIENTRAS ((x<>V(i)) Y (i<= n)) HACER	
        i <-- i+1
   FIN MIENTRAS

   (Rellenar el array W con los elementos reorganizados)
   k <-- 1
   PARA j <-- i HASTA n CON INCREMENTO DE 1 HACER 
        W(k) <-- V(j)
        k <-- k+1
   FIN PARA
   PARA j <-- 1 HASTA i-1 CON INCREMENTO DE 1 HACER 
        W(k) <-- V(j)
        k <-- k+1
   FIN PARA

   (Copiar el array W en el array V)
   PARA j <-- 1 HASTA n CON INCREMENTO DE 1 HACER 
        V(j) <-- W(j)
   FIN PARA
FIN

Programa en C

 
 void Reorg(float V[1000], int n, int x){
    /*----
     ENTRADAS:
      ''V: array que se quiere reorganizar. El array empieza en 1''
      ''n: número de elementos del array unidimensional''
      ''x: elemento de reorganización''
     SALIDAS
      ''V: Array ya reorganizado''
    ----*/
    //VARIABLES
      float W[1000];
      int i, k;
 
      //''(Localizar el elemento de reorganización en el array)''
      i=1;
      while( (x!=V[i]) && (i<=n) ){
            i=i+1;
      } 
 
      //''(Rellenar la matriz W con los elementos reorganizados)''
      k=1;
      for(j=i; j<=n; j++){
             W[k]=V[j];
             k=k+1;
      }
      for(j=1; j<=i-1; j++){
             W[k]=V[j];
             k=k+1;
      }
 
      //''(Copiar el array W en V)''
      for(j=1; j<=n; j++){
             V[j]=W[k];
      }
  }
Tipos de soluciones