Está en la página 1de 28

LICENCIATURA EN AUTOMATIZACIÓN Y

CONTROL DE PROCESOS INDUSTRIALES

Informática III

Lic. Castillo Emilce


Lic. Fus César
Recordemos un poco…
Estructuras de datos

►Los datos pueden organizarse en


diferentes formas: el modelo
matemático o lógico de una
organización particular de datos
recibe el nombre de estructura de
datos.
Las estructuras de datos se clasifican en dos
grandes grupos: estáticas y dinámicas.
Estructuras estáticas son aquellas en las que la
dimensión ocupada en memoria se declara
previamente y no es posible modificarla.

Las estructuras dinámicas, como su nombre


indica, no tienen un tamaño fijo de memoria y
mediante variables denominadas punteros es
posible modificar su tamaño en memoria.
► En el caso de un vector de nombre A y que conste de n elementos
se representa por alguna de las siguientes notaciones,
►al , a2 , a3 , . . . , an
►A(1) , A(2) , A(3) , . . . , A(n)
►A[1] , A[2] , A[3] , . . . , A[n]

► donde A es el nombre del vector y l, 2, 3, . n es el subíndice o


índice de cada elemento del vector.

► Una variable de subíndice tiene el formato general:


►variable (subíndice)
Vectores Numéricos

El paréntesis (o corchetes) después del nombre de una variable estará indicando


que se está refiriendo a un vector en lugar de a una variable ordinaria. Es decir,
A() es el vector llamado A.
Métodos de Ordenamiento y Búsqueda

La ordenación y búsqueda de la información son de las


tareas más realizadas en los procesos de manejo de datos.
Métodos de Ordenamiento ✔ Sirven para dar un orden determinado a los
elementos de una lista.
✔ Ordenar listas en orden alfabético u orden
numérico. -> Muy usual.
✔ El orden puede ser ascendente (de menor a
mayor) o descendente (de mayor a menor).
✔ Algunos algoritmos de ordenación son:

▪ Ordenamiento por Selección


▪ Algoritmo de la Burbuja.
▪ Ordenamiento por Inserción.
▪ Algoritmo Shell
Ordenamiento por Selección
✔ Primero recorre toda la lista buscando el
menor/mayor de todos los elementos.
✔ Una vez que lo encuentra lo intercambia
con el elemento ubicado en la primer
posición.
✔ En la siguiente iteración se recorre
nuevamente la lista pero comenzando en
el segundo elemento.
✔ Intercambia el valor con la segunda
posición y así repite el procedimiento con
los demás elementos.
A(8)=
1 2 3 4 5 6 7 8 Indice
13 59 57 11 68 24 46 35 Valor

Variables a utilizar:
• i=1 Condición para el intercambio
• j=i+1
• Variable temporal= Ind A(Ind)>A(j)
Resumiendo…

Inicio las variables


i=1
j=i+1=2
Ind=índice del menor valor=1

Empiezo a recorrer el vector comparando A(Ind)>A(j)

Si es Falso entonces incrementamos “j”


Si es Verdadero asignamos a ind=j y luego Incrementamos j en 1

Cuando J=N se finaliza el ciclo y se incrementa i en 1 hasta i=n-1


Diagrama de flujo
¡Ahora codifiquemos!
Declaracion del vector en ANSI-C.
int A [8];
Metodo implementado por medio de un procedimeinto en ANSI-C.
void MetodoSeleccion (int A[], int N){
int j;
Invocacion del metodo de ordenamiento en ANSI-C,
int i;
A[1] = 13;
int ind;
A[2] = 59;
int Temp ;
A[3] = 57;
for (i = 1;i <=N - 1;i++){
A[4] = 11;
ind = i;
A[5] = 68;
for(j = i + 1;j <=N;j++){
A[6] = 24;
if(A[ ind ] > A[j])
A[7] = 46;
ind = j;
A[8] = 35;
}
MetodoSeleccion (A ,8);
Temp = A[i];
for (k=1;k <=8; k++)
A[i] = A[ind ];
printf (" %d\n",A[k]);
A[ind] = Temp ;
}
};
Algoritmo de la burbuja
Este es el algoritmo mas sencillo probablemente.

Consiste en recorrer repetidamente la lista o array,


comparando elementos adyacentes de dos en dos.

Si un elemento es mayor que el que esta en la siguiente


posición se intercambian.
A(8)=
1 2 3 4 5 6 7 8 Indice
13 59 57 11 68 24 46 35 Valor

Variables a utilizar:
• i=2 hasta N
• j=1hasta N-1 A(j)>A(j+1)
Condición para el intercambio
Diagrama de flujo
¡Ahora codifiquemos!
Declaracion del vector en ANSI-C.
int A [8];
Metodo implementado por medio de un procedimeinto en ANSI-C.
void MetodoBurbuja (int A[], int N){
int j;
int i; Invocacion del metodo de ordenamiento en ANSI-C,
int Temp ; A[1] = 13;
for(i = 2;i <=N;i++){ A[2] = 59;
for(j = 1;j <=N - 1;j++){ A[3] = 57;
if(A[j] > A[j + 1]) { A[4] = 11;
Temp = A[j]; A[5] = 68;
A[j] = A[j + 1]; A[6] = 24;
A[j + 1] = Temp ; A[7] = 46;
} A[8] = 35;
} MetodoBurbuja (A ,8);
} for (k=1;k <=8; k++)
}; printf (" %d\n",A[k]);
Ordenamiento por inserción
Este método consiste en ir recorriendo el
vector e ir ubicando cada valor con respecto a
los valores ya
analizados.
Para determinar donde se ubica cada valor, se
procedera a comparar de a dos en dos los elementos
del vector. Utilizaremos un ciclo exacto con variable
de control i que ira de 2 a N que servira de gua para
el
recorrido del vector.
A(8)=
1 2 3 4 5 6 7 8 Indice
13 59 57 11 68 24 46 35 Valor

Variables a utilizar:
• i=2 a N Condición para el intercambio
• j= i-1
• Temp= i A(j)>Temp
Diagrama de flujo
Declaracion del vector en ANSI-C. ¡Ahora codifiquemos!
int A [8];
Metodo implementado por medio de un procedimeinto en ANSI-C.
void MetodoInsercion (int A[], int N){
int j;
int i;
int Temp ; Invocación del método de ordenamiento en ANSI-C, A[1] = 13;
for (i = 2;i <=N;i++){ A[2] = 59;
Temp = A[i]; A[3] = 57;
j = i - 1; A[4] = 11;
while ((A[j] > Temp ) && (j >= 1)){ A[5] = 68;
A[j + 1] = A[j]; A[6] = 24;
j = j - 1; A[7] = 46;
A[j + 1] = Temp ; A[8] = 35;
} MetodoInsercion (A ,8);
} for (k=1;k <=8; k++)
}; printf (" %d\n",A[k]);
Método Shell
El método Shell es una
optimización del método de
Inserción, procediendo a
recorrer el vector primero en
pasos de comparación
grandes y luego achicando
dicho paso.
De esta manera se logra
disminuir la cantidad de
intercambios de valores
necesarias.
A(8)=
1 2 3 4 5 6 7 8 Índice
13 59 57 11 68 24 46 35 Valor

Condición para el intercambio

El paso de comparación lo
determinamos Intervalo
A(j)>A(k)
Comparamos el valor en posición j = 1
con el situado un paso mas adelante.
Intervalo =N/2  PASO
N es el tamaño del vector
i= k
Comparamos el valor en posición j = 1 con el situado un paso mas
adelante. Dicha posicion la denominamos k = 5

La condicion A(j) = 13 > A(k) = 68 es falsa por lo que continuamos con el


siguiente valor y comparamos.

A(j)>A(k)
La condicion A(j) = 57 > A(k) = 46 es verdadera, intercambiamos valores.
Diagrama de flujo
¡Ahora codifiquemos!
Método implementado por medio de un procedimeinto en ANSI-C.

void MetodoShell (int A[], int N){


int Intervalo ;
int j;
int i;
int k;
Invocación del método de ordenamiento en ANSI-C
int Temp ;
A[1] = 13;
Intervalo = N / 2;
A[2] = 59;
while ( Intervalo > 0){
A[3] = 57;
for( i = Intervalo + 1;i <=N;i++){
A[4] = 11;
j = i - Intervalo ;
A[5] = 68;
while ( j > 0){
A[6] = 24;
k = j + Intervalo ;
A[7] = 46;
if (A[j] <= A[k])
A[8] = 35;
j = -1;
MetodoShell (A ,8);
else {
for (k=1;k <=8; k++)
Temp = A[j];
printf (" %d\n",A[k]);
A[j] = A[k];
A[k] = Temp ;
j = j - Intervalo ;
}
}
}
Intervalo = Intervalo / 2;
}
};

También podría gustarte