You are on page 1of 16

Apuntes del Prof. Hugo A.

Cuello

Estructura de Datos Arreglos

CLASE 11: Estructura de Datos Arreglos.

Estructuras de datos estticas


ARREGLOS
Los arreglos son estructuras de datos o!og"neas, es decir, todas sus componentes son del mismo tipo. Como una estructura de datos esttica su espacio debe definirse en tiempo de compilacin. #Por $u" utili%ar este tipo de estructura de datos& . Supongamos la siguiente situacin; se requiere tener en memoria interna y en forma si!ultnea los datos de los Apellidos, Nombres de 1 alumnos. !antener todos estos datos al mismo tiempo en la memoria interna requerir de 1 "ariables, pero cada una de ellas con un nombre diferente, p.e. ApeNom1, ApeNom#, ..., ApeNom1 . Notamos que esta forma de notacin $ar%a muy comple&a la tarea de programar, imaginemos ingresar estos datos, emitirlos, procesarlos y si en "e' de 1 fueran 1 1 o ms, '!uc o !s co!plicado(. (ntonces, ba&o estas situaciones, cuando contemos con una coleccin de datos todas del mismo tipo emplearemos los arreglos. )odemos decir, entonces que los arreglos son colecciones o disposiciones de datos $omog*neas ubicadas en la memoria interna y de manera continua la cual se le asigna un no!)re *nico o gen"rico que $ace referencia a esa regin de memoria reser"ada en tiempo de compilacin. A$ora bien, para poder referirnos a un elemento o componente se utili'a un su)+ndice, siendo la notacin formada por el nombre gen*rico seguido del sub%ndice encerrado entre corc$etes. )or e&emplo, si tomamos el caso anterior, el nombre gen*rico podr%a ser ApeNom y el sub%ndice podr%a ser i; por lo tanto, para indicar un elemento del arreglo lo escribir%amos como se indica a continuacin ApeNom[i]. +e esta manera al tener que emitir por e&emplo cada uno de los nombres de los alumnos, basta con "ariar el "alor del sub%ndice para $acer referencia a cada elemento del arreglo. )odr%amos representar este concepto de manera grfica, ApeNom d1,,, .on'ale', /os* d1,-1 0%os, !ar%a d1,.1l"are', )edro 2 d11/0 Sosa, Susana 1

1 # Ape1o!2i3 en donde 1 i 1,

(l grfico est indicando "arias cosas; el nombre gen*rico ApeNom , la cantidad de elementos 1 , cantidad de dimensiones 1, tipo del %ndice "alores enteros, inter"alo de "alores del %ndice [1; 10], contenido de cada elemento de tipo cadena, por otro lado se nota que la "ariable ApeNom se encuentra ubicada en la direccin 1 y que su tama-o es de Clase 11 A4E 5.6.1. 7.R.8.A. Pgina 1

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

21 b. x 10 = 210 bytes . (l rea de memoria reser"ada para la "ariable ApeNom "a desde 1 a1 3 #1 4 1, es decir de 1 a 1# 5. Si queremos a"eriguar el tama-o f+sico de un arreglo, esto se puede determinar con la funcin SizeOf(obj), en donde obj indicar el tipo arreglo o la "ariable de ese tipo arreglo. La funcin retorna un longint indicando la cantidad de byte de ese ob&eto. Si queremos calcular el espacio ocupado por la "ariable ApeNom, lo establecer%amos de la siguiente manera, SizeOf(ApeNom), y si ApeNom fue definido de tipo VecAl como un arreglo con 1 componentes cada una de las cuales ser%a una cadena de # caracteres, lo establecer%amos de la siguiente manera, SizeOf(VecAl ). )or lo tanto, SizeOf(ApeNom) = SizeOf(VecAl ) = 210. )or otro lado, si lo que queremos es a"eriguar cuantas componentes tiene un arreglo, esto se establecer%a como el tama-o f%sico del arreglo di"idido por el tama-o de una de sus componentes, es decir, SizeOf(ApeNom) !i" SizeOf(ApeNom[1]) = 210 !i" 21 = 10. Si utili'amos un sub%ndice para que $aga referencia a un elemento del arreglo, estar indicando una direccin de memoria dentro de ese inter"alo, siempre y cuando el "alor del sub%ndice est* comprendido entre 1 y 1 . As%, p.e. si i = 1 la direccin del primer elemento del arreglo coincide con la direccin de la "ariable ApeNom, es decir, !ApeNom 6 !Apenom718, en donde la letra ! indica direccin, si i = 2, la direccin de inicio del segundo elemento es 1 #1, en cambio si i = #, la direccin de inicio del tercer elemento es 1 9# y as% sucesi"amente. )or lo tanto, notamos que un incremento de 1 en el sub%ndice en realidad es un incremento en #1 bytes, es decir, un incremento de acuerdo al tama-o de cada componente del arreglo. #9u" suceder si el su)+ndice adoptara un :alor inferior o superior a 1 ; 1, respecti:a!ente& La respuesta es ob"ia, estar%amos in"adiendo una 'ona de memoria desconocida, por lo tanto, los efectos que se podr%an producir ser%an impredecibles, algunos de los cuales podr%an ser, cambiar los "alores a otras "ariables que estu"ieran contiguas a esta regin de memoria, que aparecieran caracteres e:tra-os en la pantalla, que se colgara la e&ecucin del programa, entre otros. Ser responsabilidad del programador lle"ar el control del "alor del sub%ndice. ;urbo )ascal brinda de una directi"a al compilador <=R>? y <=R@? que permite modificar para que el compilador pueda $acer un control o no, de los "alores que tomen las "ariables y en el caso de los arreglos tambi*n el sub%ndice, para que genere un error cuando sus "alores escapen fuera de su inter"alo definidos en tiempo de compilacin. <a&o estas situaciones se detendr la e&ecucin del programa, si la directi"a est indicada con signo ms. (n cambio si la directi"a est indicada con signo menos se desacti"a esta caracter%stica y en caso que una "ariable o sub%ndice adopten "alores fuera de su inter"alo no se generar ninguna ad"ertencia por parte del compilador y la e&ecucin del programa continuar como si nada $ubiese ocurrido, en estos casos se complementar el "alor e:cedido para que se genere un "alor dentro del inter"alo aceptado por la declaracin del tipo de la "ariable. =na e:cepcin a esta directi"a, es cuando en el cdigo del programa asignamos un "alor fuera de los l%mites que puede soportar una "ariable, en estos casos, al momento de compilar el programa, el mismo compilador informar que el "alor que queremos asignar est fuera de los l%mites. )or e&emplo, si : es una "ariable de tipo byte y $acemos x 2$% al compilar el programa generar un mensa&e de error. (n el caso de los %ndices de un arreglo, si tomamos el e&emplo anterior que es de 1 a 1 , si el sub%ndice adoptara un "alor de 1> 12 #>> no se complementar%a ya que el compilador lo determinar%a como de tipo byte, pero si tomara un "alor negati"o o mayor a #>> en estos Clase 11 A4E 5.6.1. 7.R.8.A. Pgina -

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

casos s% lo complementar%a, pudiendo generar un "alor entre y #>>, esto en la situacin en que le asignemos estos posibles "alores a la "ariable que ser empleada como %ndice, p.e. si asignamos a la "ariable : #>> y $acemos que la "ariable i : 3 2, si la "ariable i estu"iera definida como de tipo byte el "alor que se asignar%a no ser%a #>? sino que se complementar%a y pasar%a a contener #, es decir, el resultado de #>? 4 #>@, luego si $acemos ApeNom[i] se estar%a refiriendo al segundo elemento del arreglo, es decir a 0%os, !ar%a. (n cambio, si lo que quisi*ramos reali'ar fuera ApeNom[i & #] , en este caso el resultado ser%a #>?, no se complementa y por lo tanto, se estar%a $aciendo referencia al elemento #>? y como notamos, eso est fuera de la regin de memoria de ApeNom, en conclusin, se est in"adiendo una regin de memoria desconocida y como consecuencia se podr%a tener los problemas anteriormente indicados. La directi"a al compilador <=R ? reali'a la "erificacin de inter"alo de "alores de los ob&etos, el s%mbolo 0 se refiere a '()*e, y el error informado en tiempo de e&ecucin es el ErrorA-,1 +()*e c,ec- e''o', Aerificacin de inter"alo. (l "alor por defecto es BC0DE, "ale decir, est desacti"ada. (n el estado BC03E los arreglos y las e:presiones de cadena inde:adas c(![i] , son "erificadas dentro de los l%mites definidos, y todas las asignaciones a "ariables escalares y de inter"alo son tambi*n "erificadas dentro de los l%mites definidos. Si la "erificacin de inter"alo falla, la e&ecucin del programa finali'a y se muestra un mensa&e de error. (sta opcin se debe utili'ar en tiempo de depuracin del programa y desacti"arla cuando el programa $aya sido depurado, de esta manera el programa correr ms rpidamente. Si lo que queremos es controlar en todo el mbito del programa, entonces la directi"a debe ubicarse antes de los mdulos, un lugar apropiado ser%a incluso antes de la cabecera del programa, es decir, antes de la palabra reser"ada progra!, o bien inmediatamente a continuacin de esta cabecera, como se muestra en los siguientes e&emplos, BC03E progra! AerificarFnter"alos; ... progra! AerificarFnter"alos; BC03E ...

Gtros tipos de ad"ertencias que se podr%an generar al compilar un programa que utilice arreglos, son los casos en que nos quedemos sin memoria suficiente; informados por el compilador ;urbo )ascal ser%an los siguientes, ErrorA-- St' ct 'e too l('*e, (structura muy grande. Se produce al definir un arreglo en el cual la memoria se "e saturada por el espacio a reser"ar, es decir, cantidad de elementos por la cantidad de bytes de cada componente, es mayor a @9 Hbytes, que es el espacio m:imo para las "ariables globales, p.e. al definir el siguiente tipo de dato " = array[1..#000] of st'22; se generar dic$o error. ErrorA0B .oo m()y "('i(bles, +emasiadas "ariables. Se producir el definir "arias estructuras de datos en la cual ninguna de ellas supera el m:imo permitido, pero s% la sumatoria de ellas, p.e. " = (''(y[1..2000] of st'22; / = (''(y[1..1000] of st'22; lo mismo ocurrir%a al declarar "ariables espacios en cada uno de los mdulos. Conclusin, al momento de utili'ar arreglos, se deben tomar ciertas medidas pre"enti"as. La memoria interna puede "erse saturada, el sub%ndice puede tomar "alores fuera del inter"alo de "alores definidos. )or estos moti"os se recomienda reali'ar una

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina C

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

estimacin necesaria para la cantidad de memoria a utili'ar y asegurarse los "alores que adopten los %ndices, ya que, la responsabilidad ser e:clusi"amente del programador.

Arreglos en 6ur)o Pascal


)ara poder emplear arreglos primero debemos definir un identificador de tipo arreglo. (n el mismo se indicar la cantidad de dimensiones y por cada dimensin la cantidad de elementos o componentes que tendr, por Iltimo se indicar el tipo de esas componentes. A continuacin se muestra como declarar un tipo arreglo en ;urbo )ascal, t4pe Arreglo 6 arra47!ime)si0)1, !ime)si0)2, ... 8 of tipo; (n el e&emplo anterior "emos que la palabra reser"ada arra4 establece el tipo arreglo, dimensin1 establece la primer dimensin del arreglo, dimensin# la segunda dimensin y as% sucesi"amente, ;urbo )ascal no impone l%mites en la cantidad de dimensiones, el l%mite solamente estar impuesto por la cantidad de memoria interna disponible y esto es solo para el segmento de datos cuyo tama-o m:imo es de @9Hb. Cada una de las dimensiones de un arreglo establecer la cantidad de componentes a tra"*s de un inter"alo "(l1)i.."(l2i) en donde, "(l1)i indica el "alor inicial y "(l2i) el "alor final, es decir, el inter"alo cerrado de "alores que podr contener el sub%ndice, mientras que tipo establece el tipo de "alores de cada componente del arreglo. ;ratndose si las "ariables de tipo arreglo se declararon de mbito global entonces ocupar el segmento de datos y su tama-o m:imo es de @9 Hbytes. )ero si la "ariable fue declarada de mbito local, es decir dentro de un mdulo, la regin de memoria es el segmento del stacJ o pila y el tama-o de la memoria de esta regin por defecto ;urbo )ascal lo establece en 1@2?9 bytes, aunque su "alor m:imo se podr%a lle"ar a los @9 Hbytes, el resultado ser%a si el tama-o fuera el "alor por defecto suceder%a un error en tiempo de e&ecucin por desbordamiento de la pila, es decir supero la capacidad de almacenamiento. +e este e&emplo, se puede inferir que una "ariable de tipo arreglo insume muc$a memoria. Los "alores "(l1)i y "(l2i) deben ser de tipo ordinal, "ale decir, que pueden ser los enteros, Dpero no el tipo longint o por inter:alo de tipo longint D, c$ar, boolean, o definidos por el usuario. Solo se podrn consignar "alores constantes tanto para "alFni como para "alKin. Cada dimensin podr ser de diferentes tipos ordinales, por e&emplo, si un arreglo fue definido con # dimensiones, la primer dimensin podr%a ser "alores enteros y la segunda "alores c$ar, como se muestra a continuacin, A''+e(l = (''(y[1..103 4A5..565] of real; el tipo definido por el usuario A''+e(l es igual al tipo arreglo con # dimensiones, siendo la primer dimensin establecida en el inter"alo 71; 1 8, lo que establece que el sub%ndice de la primer dimensin slo podr tomar "alores entre 1 y 1 y la segunda dimensin establecida en el inter"alo 7LAM; L(M8, lo que establece que el sub%ndice de la segunda dimensin slo podr tomar "alores entre LAM y L(M. La cantidad de elementos del arreglo A''+e(l est Clase 11 A4E 5.6.1. 7.R.8.A. Pgina .

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

establecida en 1 : > 6 > elementos ocupando un espacio en la memoria interna cuando se declaren "ariables de ese tipo de > : @ bytes 6 2 bytes. Los arreglos con una dimensin se denominan :ectores y los arreglos con # dimensiones se los denominan !atrices. A los elementos de un arreglo se los puede acceder en for!a secuencial o )ien al a%ar . La manera de recorrer los elementos secuencialmente es con un ciclo que lo recorra desde su "alor inicial $asta su "alor final o bien dentro de estos "alores. Las componentes de un arreglo se ubican en la memoria en forma lineal, en un arreglo unidireccional la correspondencia es directa, pero #c;!o ser en el caso de un arreglo )idireccional o con !s di!ensiones&. ;omemos el caso de un arreglo de # dimensiones de m x ), es decir, m filas y ) columnas, la disposicin se reali'ar por filas o bien por columnas, esto lo determinar el propio lengua&e a utili'ar. (n el caso del ;urbo )ascal la disposicin de los elementos, la con"encin elegida es por filas, esto es, primero se ubican en la memoria los primeros ) elementos de la primer fila, luego los segundos ) elementos de la segunda fila y as% sucesi"amente $asta completar los Iltimos ) elementos de la fila m. Conociendo esta disposicin de los elementos, es fcil poder determinar el lugar de almacenamiento en forma lineal de un eleme)to[i3 j] aplicando la siguiente e:presin, con, (1 i m) 9 (1 j )) (i 7 1) 8 ) & j D1E

)or e&emplo, si m = : y ) = $, encontrar la posicin del eleme)to[23 :] , aplicando la e:presin N1O, reempla'ando i por 2 y j por : obtenemos ;, por lo tanto, el eleme)to[23 :] lineali'ado se locali'a en la posicin ordinal ; a partir de la direccin inicial del arreglo en la memoria interna. (n el e&emplo que se detalla a continuacin notamos que el eleme)to[23 :] = 22 y en la lineali'acin dada a continuacin "emos que en la posicin ; el "alor es 22. Fatri% 1 # 2 9 2# 2> >@ 15 1 1? 2 1# ?2 # @ ? P@ # 2 9> ## P 1> 9 #2 1 #2 9 >

Fatri% lineali%ada 2# 1? @ 9> #2 2> 2 posici;n 1 # 2 9 > @ P

? ## 1 >@ 1# P@ P #2 15 ?2 # 1> 9 ? 5 1 11 1# 12 19 1> 1@ 1P 1? 15 #

Las matrices pueden ser rectangulares o cuadradas. =na matri' rectangular es aquella en la que la cantidad de filas es distinta a la cantidad de columnas es decir, A)xm3 en donde, ) < m y una matri' cuadrada es aquella en la que la cantidad de filas es igual a la cantidad de columnas, es decir, A)xm = A)x) ya que, ) = m. =na matri' cuadrada presenta # diagonales, una diagonal principal y una diagonal secundaria. Los elementos que se encuentran en la diagonal principal tienen como Clase 11 A4E 5.6.1. 7.R.8.A. Pgina G

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

condicin i = j y los elementos que se encuentran en la diagonal secundaria tienen como condicin i & j = ) & 1. DHHE Asignar unos a los elementos de la diagonal principal, i 1Q n A7i, i8 1 Asignar 1Ms a los elementos de la diagonal secundaria, i 1Q n A7i, n 3 1 D i8 1 n 3 1 4 i se obtiene de despe&ar & en la e:presin DHHE Los elementos de un arreglo se pueden utili'ar de la misma manera que las "ariables simples para, asignarles un "alor en una asignacin interna o como una asignacin e:terna de entrada o de salida, comparar su "alor, utili'arlas en una e:presin, etc. EIe!plo, A7i8 > A7i 8 A7i8 : 2 : A7i8 di" # A7r.cmp8 U : A7A7#88

EIe!plos, const !FN 6 1; !AR 6 1 ; =L;S!(S 6 1#; t4pe str 6 string7# 8; FntAal 6 1..=L;S!(S; Arr=no 6 arra47!FN..!AR8 of Tord; Arr+os 6 arra471..>,M1M..M>M8 of str# ; Arr1 6 arra47D>..>8 of longint; Arr# 6 arra47FntAal8 of c$ar;

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina B

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

(n todos los e&emplos precedentes el tipo de cada elemento es un tipo simple de dato, pero e:iste la posibilidad que esos tipos sean de un tipo estructurado de datos. )or lo tanto el tipo de cada componente tambi*n podr%a ser como se indica a continuacin, t4pe str# 6 string7# 8; Kec$a 6 record aa , Tord; mm, dd , byte end; ACuotas 6 arra471..1#8 of real; 0egAlu 6 record NroLeg , longint; ApeNom, +omic, Local , str# ; KecNac , Kec$a; (stCi" , c$ar; ;raba&a , boolean; Cuotas , ACuotas end; Aec0egAlu 6 arra471..1 8 of 0egAlu; AecAec 6 arra471..1 8 of arra471..1 8 of 0egAlu; C&to<yte 6 set of byte; AecC&to 6 arra471..> 8 of C&to<yte; :ar AapeNom , Aec0egAlu; Al igual que los arreglos con componentes simples, tambi*n podremos referirnos a elementos de una estructura arreglo de registro para asignar "alores de manera interna o e:terna de entrada o salida, comparar, emplear dentro de e:presiones, etc. (&emplo, AapeNom7i8.NroLeg 1#29 AapeNom7i8.KecNac.mm U mes : : 3 AapeNom7i8.Cuotas7&8 PasaIe de par!etros de tipo arreglos +e la misma manera que las "ariables simples, o arc$i"os, o registros, o con&untos, los arreglos tambi*n pueden ser pasados como parmetros a los mdulos. Cabe aclarar que los arreglos pueden ser pasados por "alor o por referencia, en el primer caso se $ar%a una copia del arreglo en el segmento de la pila, lo que implica que si el arreglo es muy grande podr%amos saturar ese espacio con la consecuente situacin de error por desbordamiento de la pila, siendo el Error A-,- St(c- o"e'flo/ e''o', (rror por desbordamiento de la )ila. (ste es un error fatal y ocasionar la terminacin de la e&ecucin del programa Clase 11 A4E 5.6.1. 7.R.8.A. Pgina J

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

inmediatamente. (n el segundo caso si el arreglo es pasado por referencia solo se pasa un puntero al arreglo. )or lo tanto, lo aconse&able ser%a pasar los arreglos siempre por referencia. A continuacin presentamos di"ersas "ariantes para pasar como parmetro la "ariable V(peNom, por ra'ones de con"eniencia en la escritura, se pasar el arreglo por "alor. SizeOf(+e*Al ) = 1:$ y SizeOf(V(peNom) = 1:$00 Cant. )4tes Hn:ocaci;n o Lla!ada Ca)ecera del F;dulo $ue se pasan !od1NAapeNomO !od1NAapeN , Aec0egAluO 19> !od#NAapeNom7i8O !od#NrApeN , 0egAluO 19> !od2NAapeNom7i8.NroLegO !od2NNleg , longintO 9 !od9NAapeNom7i8.KecNacO !od9NfNac , Kec$aO 9 !od>NAapeNom7i8.KecNac.mmO !od>Nmes , byteO 1 !od@NAapeNom7i8.CuotasO !od@NCta , AcuotasO P# !odPNAapeNom7i8.Cuotas7&8O !odPNFmpo , realO @ La asignacin entre "ectores es posible siempre y cuando los arreglos sean del mismo tipo. Si Arr=no es un tipo arreglo y Aec1 y Aec# son ambos de tipo Arr=no, entonces la asignacin entre estos dos arreglos es "lida, como se indica a continuacin, Vec2 Vec1 (sto mismo ser%a equi"alente a reali'ar, i 1 10 Vec2[i] Vec1[i]

Operaciones con arreglos


8*s$ueda secuencial o lineal La bIsqueda secuencial en un arreglo consiste en buscar un "alor en el arreglo recorriendo los elementos adyacentes, comen'ando desde una posicin inicial. (l proceso finali'a cuando se encuentre una posicin en el cual su "alor es el buscado o bien cuando se $aya alcan'ado al Iltimo elemento y no apareci el "alor buscado. )or lo tanto $abr dos situaciones de salida, una es cuando se encontr el "alor y la otra cuando se alcan' al Iltimo elemento en el arreglo sin $aberse encontrado el "alor. +e esto se desprende que si el "alor estu"iera en la primera posicin, un solo acceso al arreglo ser%a suficiente y en el peor de los casos tendremos que acceder $asta la Iltima posicin, as%, si un arreglo tu"iera ) componentes, la cantidad de accesos promedia ser%a de ) = 2. A continuacin se presenta el siguiente mdulo en el cual se buscar el "alor de una cla"e en un arreglo, retornando el mdulo la posicin encontrada si el "alor cla"e se encontr en el arreglo, caso contrario un "alor cero si no se encontr.

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina /

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

8usLin NArr , tArr; cl" , tipoR; Card , byteO , byte

<usLin i 1 e:iste false K eListe M Di CardE Arr2i3 N cl: e:iste <usLin true i 0 (l m*todo de bIsqueda secuencial sir"e tanto si el arreglo est desordenado como si se encontrara ordenado. No obstante en los casos en que el arreglo estu"iera ordenado deber%a optimi'arse el algoritmo para los casos en que $abiendo llegado a una posicin en el arreglo y siendo que su contenido es mayor al "alor buscado, ba&o esta situacin se deber%a abandonar la bIsqueda, ya que si no se lo encontr $asta esa posicin, tampoco se lo encontrar ms adelante, por ser todos esos "alores mayores al buscado, sabiendo que el arreglo se encontraba ordenado en forma ascendente. A continuacin se presenta el mdulo de bIsqueda secuencial optimi'ado. i i31

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 0

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

8usLinOpt NArr , tArr; cl" , tipoR; Card , byteO , byte

<usLinGpt i salir

1 false

K salir M Di CardE Arr2i3 N cl: salir true <usLinGpt i salir Arr2i3 P cl: true i i31

0 (l mdulo <usLinGpt me&ora el rendimiento de la bIsqueda con respecto al mdulo <usLin, ya que en el segundo caso si se encontr un "alor mayor al buscado se abandona la bIsqueda de los siguientes elementos restantes. )ero, #ser este el !eIor !"todo de )*s$ueda cuando el arreglo se encuentre ordenadoO por el :alor de la cla:e a )uscar&. La respuesta es '1O(. =na me&or manera de buscar un "alor en un arreglo ordenado ser aquel que obtiene un punto medio entre sus e:tremos y es comparado por el "alor a buscar, si es, entonces se encontr y se abandona la bIsqueda, en cambio si no lo es, caben dos posibilidades, que $aya que seguir buscando en una primera mitad o bien en la segunda mitad, en ambos casos el arreglo queda reducido para continuar la bIsqueda en la mitad. (l m*todo que reali'a estas acciones se conoce como m*todo de bIsqueda binario o dicotmica. (ste m*todo ya fue presentado en el tema de buscar un elemento en un arc$i"o ordenado. )or lo tanto, diremos que conser"ar bsicamente la estructura lgica "ista, la Inica diferencia notable est en que no $ace falta ba&ar el dato ya que se encuentra en la propia memoria interna. A continuacin se presenta el mdulo de bIsqueda binaria o dicotmica en arreglos.

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 1,

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

8us8in NArr , tArr; cl" , tipoR; =lt , byteO , byte

<us<in pri 1 salir false Dpri ultE M K salir med Npri 3 ultO di" # Arr2!ed3 N cl: salir true <us<in med Arr2!ed3 Q cl: pri med 3 1 ult med D 1

(l m*todo comien'a conociendo las posiciones e:tremas del arreglo, pri y ult, se obtiene el punto medio med y se compara si el "alor de esta posicin es el "alor cla"e a buscar, si es entonces se abandona el proceso, sino caben # alternati"as, es menor, entonces se modifica el e:tremo inferior pri por el de la posicin med 3 1 caso contrario se modifica el e:tremo superior ult por el de la posicin med 4 1, luego de lo cual se obtiene una nue"a posicin med. Si despu*s de reiteradas bIsquedas no aparece el "alor el algoritmo finali'a cuando el "alor e:tremo inferior pri se "uel"a mayor al "alor del e:tremo superior ult. Como "emos por cada comparacin reali'ada se reduce a la mitad el con&unto de "alores a consultar, por lo tanto, el anlisis ser de, n V #, n V 9, n V ?; es decir, n V #1, n V ##, n V #2 (l proceso finali'ar cuando el tama-o se $aga W 1. )or lo tanto, si J es el nImero mayor de comparaciones n V #J W 1 establecer la finali'acin.

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 11

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

Si tomamos un con&unto de > elementos, la cantidad m:ima de comparaciones estar en el orden de log# n 6 log# > X1@. )or lo tanto, con J 6 1@ se abandonar la bIsqueda si aIn no se encontr el "alor de la cla"e en el arreglo. EIe!plo, Se tiene el siguiente arreglo Arr con los siguientes elementos, > 1# #P 2# 2> 92 >9 >@ @1 @@ ?9 5@ 5? 115 1># pos. 1 # 2 9 > @ P ? 5 1 11 1# 12 19 1> y se requiere buscar el "alor 2>, los pasos a reali'ar establecern los siguientes "alores para los e:tremos y los puntos medios, pri 1, ult 1>, med ?, como el "alor de la pos. ? es >@ y no es igual a 2> la comparacin siguiente >@ W 2> es falsa se cambia el e:tremo superior ult med 4 1 y med 9, como el "alor de la pos. 9 es 2# y no es igual a 2> la comparacin siguiente 2# W 2> es "erdadera se cambia el e:tremo inferior pri med 3 1 y med @, notamos que 92 W 2> es falso se modifica ult med 4 1 y med >, por Iltimo "emos que el "alor de la pos. > 2> es igual al "alor a buscar que es 2>, por lo tanto $emos encontrado el "alor cla"e. ;ambien notamos que los e:tremos en este Iltimo caso se $icieron iguales y &ustamente en esa posicin se encontraba el "alor a buscar, este ser%a la Iltima comparacin a reali'ar si el "alor no se $ubiera encontrado, debido a que en el pr:imo paso el e:tremo inferior se "ol"er%a mayor al e:tremo superior, indicando que no debemos seguir procesando la bIsaqueda.

Ordenaci;n de arreglos
Como fue indicado en prrafos pre"ios un arreglo podr encontrarse ordenado o no. Si no se encuentra ordenado, a efectos de me&orar el rendimiento de un proceso o por moti"os de mostrar los datos ordenados ba&o un determinado criterio, $acen de la necesidad de ordenar los arreglos. (:isten "arios m*todos para ordenar arreglos, pero bsicamente podr%amos di"idirlos en # clases; los m*todos cuadrticos o directos NN2O y los m*todos a"an'ados o logar%tmicos o indirectos NN x lo*2 NO. (n el primer grupo encontramos "arios m*todos, a saber; burbu&a Nbubble sortO, seleccin, insercin. (n el segundo grupo encontramos tambi*n "arios m*todos, a saber; s$ell, quicJ sort, ordenacin por me'cla Nme'*eO. Los m*todos directos son fciles de programar pero de e&ecucin ms lenta. (n cambio, los m*todos indirectos son ms comple&os en su programacin pero ms eficientes para su e&ecucin ya que corren ms rpidamente que los directos. No obstante, con pocos elementos en un arreglo, ambos m*todos directos o indirectos funcionan muy pare&os. A continuacin se presentar el m*todo de ordenacin por burbu&eo optimi'ado. (ste m*todo compara elementos adyacentes, es decir, "7i8 y "7i318, cada "e' que un elemento de una posicin menor sea mayor al adyacente inmediato siguiente se debe reali'ar un intercambio, por lo tanto, al a"an'ar desde las posiciones inferiores $acia las posiciones superiores del arreglo, se ir arrastrando el "alor mayor $asta alcan'ar la Iltima posicin, y algunos de los "alores menores se irn corriendo $acia las posiciones inferiores. La cantidad de pasadas estar en funcin de la cantidad de elementos de un arreglo. (n el caso de un arreglo con n cantidad de elementos la cantidad de pasadas m:imas ser de n 4 1. )ero este m*todo por ser optimi'ado tiene la caracter%stica de que si en una pasada no se Clase 11 A4E 5.6.1. 7.R.8.A. Pgina 1-

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

reali' ningIn intercambio podemos asegurar que el arreglo ya qued ordenado y por lo tanto abandonar las restantes pasadas, consiguiendo un a$orro en el tiempo de e&ecucin. )or cada pasada debemos recorrer cada elemento desde 1 $asta a n 4 J, en donde, J en la primer pasada "ale 1, en la segunda pasada "ale # y as% sucesi"amente. Al termino de cada pasada se $abr acomodado el elemento ms pesado en la Iltima posicin de cada pasada. Seguidamente se presenta el algoritmo de ordenacin por burbu&eo optimi'ado.

OrdL8ur N"ar Arr , tArr; Card , byteO

J 1 ordenado true i 1 Card @ R Arr2i3 P Arr2i>13 ordenado false FntCmbNArr7i8, Arr7i318O

J J31 ordenado 0 Los m*todos directos de ordenacin se miden en cuanto a la cantidad de preguntas que deben de reali'arse y est en funcin del "alor N. (n el caso de la ordenacin por burbu&a optimi'ado, notamos que en la primera pasada la cantidad de comparaciones es de ) > 1, en la segunda pasada de nD#, nD2 en la tercera pasada, $asta llegar a 1 comparacin en la Iltima pasada, por lo tanto, 1 & 2 & # & ... & () 7 #) & () 7 2) & () 7 1) = ) ? () 7 1) = 2 = ()2 > )) = 2 (l me&or de los casos es que el arreglo se encuentre ordenado, en esta situacin solo $ar falta una pasada, en cambio, el peor de los casos ser que el arreglo se encuentre ordenado in"ertido, es decir, si queremos ordenarlo en forma ascendente y se encuentra ordenado en forma descendente.

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 1C

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

Los m*todos "istos en prrafos pre"ios de bIsqueda secuencial, bIsqueda secuencial optimi'ada, bIsqueda binaria y ordenacin por burbu&eo, $an sido desarrollados para arreglos en la que las componentes son de un "alor simple de dato. No obstante, estos mismos m*todos con algunas ligeras modificaciones pueden ser aplicados para arreglos cuyas componentes sean de tipo estructurado, lo ms comIn de tipo registro. <a&o esta situacin al comparar un elemento con otro modificamos la notacin A''[i] por A''[i].cmp en donde, cmp es el nombre de una de las componentes del registro, es decir, el nombre de un campo.

Arreglos paralelos
=na alternati"a a los arreglos de registro son los arreglos paralelos. Se denominan arreglos paralelos debido a que las componentes de un arreglo se corresponden con las componentes de los otros arreglos, es decir, A''1[i] se corresponde con A''2[i] , ... A'')[i] . Los procesos anali'ados anteriormente, podr%an aplicarse tanto a los arreglos de registros como a los arreglos paralelos. )or e&emplo, si estamos ordenando el arreglo, en el caso de arreglos de registro al intercambiar las componentes A''[i] y A''[i&1] se intercambian todos los campos de esas componentes, es decir se mue"e el registro completo de una y de la otra componente. (n el caso de los arreglos paralelos se deben intercambiar todas las posiciones correspondientes de cada uno de ellos, "ale decir, A''1[i] se intercambia con A''1[i&1] , A''2[i] se intercambia con A''2[i&1] , ..., A'')[i] se intercambia con A'')[i&1] . +espla'amiento de elementos en un arreglo =n arreglo puede generarse incorporando "alores en forma ordenada en el mismo instante en que ocurre el e"ento. (sta accin implicar reali'ar un corrimiento de un lugar, de aquellos elementos que ya estu"ieran en el arreglo para abrir un lugar al nue"o elemento que se insertar en la posicin apropiada para mantener el orden, ya sea ascendente o descendente. La siguiente figura muestra un e&emplo de insertar el "alor 92 en un arreglo que ya contiene los siguientes "alores, # 1 5 # 1# 2 #? 9 2> > 91 @ 95 P ># ? ?P 5 59 1 11 1# 12 19 1>

SegIn el modelo presentado el "alor 92 deber ser insertado entre los "alores 91 y 95. )ara poder lle"ar a cabo esto, los "alores mayores a 91 debern ser despla'ados un lugar $acia la derec$a. Al $acerlo debemos tener cuidado de no perder ningIn "alor en el arreglo, est claro que si mo"i*ramos el "alor 95 a la posicin siguiente perder%amos el "alor >#, por lo tanto el despla'amiento deber%a reali'arse desde el fondo $acia arriba o en esta situacin desde la derec$a $acia la i'quierda, esto es, el "alor 59 se mo"er%a a la posicin 11, luego el "alor ?P se mo"er%a a la posicin 1 , y as% sucesi"amente $asta alcan'ar el "alor 95 que se mo"er%a a la posicin ?. )or Iltimo insertar%amos el "alor 92 en la posicin P. (ste proceso debe contemplar todos los casos posibles, es decir, al insertar el primer elemento, al insertar el Iltimo elemento que completa el arreglo, al insertar al inicio, al insertar al final o en

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 1.

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

cualquier otra ubicacin, incluso con "alores que puedan repetirse, insertar ya dado un &uego de "alores que se ingresarn ordenados ascendente o descendentemente. (l proceso deber contemplar entonces todos estos casos. A continuacin se presenta el algoritmo correspondiente. FnsertarGrdenadoN"ar "ec , t"ector; card,TordO

card

: J i NJ U 1O Y N: W "ec7J 4 18O "ec7J8 "ec7J 4 18 J JD1

"ec7J8 :

o, como el siguiente mdulo, el cual antes de in"ocar se debe determinar que el "alor no e:ista en el arreglo, si es as%, se incrementa en 1 la cantidad de elementos en el arreglo y a continuacin se in"oca al mdulo pasando como argumentos el arreglo, el ele!ento a incorporar y la cardinalidad actuali'ada pre"iamente. A continuacin se representa el mdulo de Fnserta(nGrden ,

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 1G

Apuntes del Prof. Hugo A. Cuello

Estructura de Datos Arreglos

HnsertaEnOrdenN"ar "ec , t"ector; elem, card,TordO

Dcard P 1E M Dele! Q :ec2card S 13E "ec7card8 "ec7card 4 18 card card D 1 "ec7card8 elem 0

Clase 11

A4E

5.6.1. 7.R.8.A.

Pgina 1B

You might also like