17.05.2013 Views

Tutorial de Apuntadores y Arreglos en C - Cimat

Tutorial de Apuntadores y Arreglos en C - Cimat

Tutorial de Apuntadores y Arreglos en C - Cimat

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}<br />

}<br />

{<br />

}<br />

if (a[j-1] > a[j])<br />

{<br />

t = a[j-1];<br />

a[j-1] = a[j];<br />

a[j] = t;<br />

}<br />

El método <strong>de</strong> la burbuja es un algoritmo <strong>de</strong> or<strong>de</strong>nación <strong>de</strong> los más s<strong>en</strong>cillos. El algoritmo busca <strong>en</strong> el arreglo<br />

<strong>de</strong>s<strong>de</strong> el segundo hasta el último elem<strong>en</strong>to comparando cada uno con el que le prece<strong>de</strong>. Si el elem<strong>en</strong>to que le<br />

prece<strong>de</strong> es mayor que el elem<strong>en</strong>to actual, los elem<strong>en</strong>tos son intercambiados <strong>en</strong> su posición <strong>de</strong> tal modo que el<br />

más gran<strong>de</strong> que<strong>de</strong> más cerca <strong>de</strong>l final <strong>de</strong>l arreglo. En la primera pasada, esto resulta <strong>en</strong> que el elem<strong>en</strong>to más<br />

gran<strong>de</strong> termina al final <strong>de</strong>l arreglo.<br />

El arreglo está ahora limitado a todos los elem<strong>en</strong>tos, a excepción <strong>de</strong>l último y el proceso se repite. Eso pone el<br />

sigui<strong>en</strong>te elem<strong>en</strong>to más gran<strong>de</strong> <strong>en</strong> el lugar que prece<strong>de</strong> al elem<strong>en</strong>to más gran<strong>de</strong>. El proceso se repite un<br />

número <strong>de</strong> veces igual al número total <strong>de</strong> elem<strong>en</strong>tos m<strong>en</strong>os 1. El resultado final es un arreglo or<strong>de</strong>nado.<br />

Aquí nuestra función está diseñada para or<strong>de</strong>nar un arreglo <strong>de</strong> <strong>en</strong>teros. Así que <strong>en</strong> la línea comparamos<br />

<strong>en</strong>teros y <strong>de</strong> la línea 2 a la 4 usamos un almacén temporal <strong>de</strong> <strong>en</strong>teros para guardar <strong>en</strong>teros. Lo que queremos<br />

averiguar es que si po<strong>de</strong>mos modificar este código para que pueda usarse con cualquier tipo <strong>de</strong> datos, es <strong>de</strong>cir<br />

que no esté restringido a la or<strong>de</strong>nación <strong>de</strong> <strong>en</strong>teros.<br />

Al mismo tiempo no <strong>de</strong>seamos modificar nuestro algoritmo ni el código asociado a él cada vez que lo usamos.<br />

Com<strong>en</strong>cemos por remover la comparación <strong>de</strong>ntro <strong>de</strong> la función bubble() para que nos sea relativam<strong>en</strong>te fácil<br />

modificar la función <strong>de</strong> comparación sin t<strong>en</strong>er que re-escribir pedazos relacionados con el algoritmo <strong>de</strong><br />

or<strong>de</strong>nación <strong>en</strong> sí.<br />

Esto nos trae como resultado el programa bubble_2.c:<br />

bubble_2.c<br />

/* Program bubble_2.c from PTRTUT10.HTM 6/13/97 */<br />

/* Separamos la función <strong>de</strong> comparación */<br />

#inclu<strong>de</strong> <br />

int arr[10] = { 3,6,1,2,3,8,4,1,7,2};<br />

void bubble(int a[], int N);<br />

int compare(int m, int n);<br />

int main(void)<br />

{<br />

int i;<br />

putchar('\n');<br />

39

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!