Tutorial de Apuntadores y Arreglos en C - Cimat
Tutorial de Apuntadores y Arreglos en C - Cimat
Tutorial de Apuntadores y Arreglos en C - Cimat
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