Ejemplos Divide y Vence

También podría gustarte

Está en la página 1de 3

Busqueda binaria

PROCEDURE BuscBin2(Var a:vector;


prim,ult:CARDINAL;x:INTEGER):BOOLEAN;
VAR tercio:CARDINAL; (* posicion del elemento n/3 *)
BEGIN
IF (prim>=ult) THEN RETURN a[ult]=x
ELSE
tercio:=prim+((ult-prim+1)DIV 3);
IF x=a[tercio] THEN RETURN TRUE
ELSIF (x<a[tercio]) THEN RETURN BuscBin2(a,prim,tercio,x)
ELSE RETURN BuscBin2(a,tercio+1,ult,x)
END
END
END BuscBin2;

Calcular elemento mayoritario


PROCEDURE Mayoritario(VAR a:vector;prim,ult:CARDINAL):BOOLEAN;
(* supone que el vector esta ordenado *)
VAR mitad,i:CARDINAL;
BEGIN
IF prim=ult THEN RETURN TRUE END;
mitad:=(prim+ult+1)DIV 2;
FOR i:=mitad TO ult DO
IF a[i]=a[i-mitad+prim] THEN RETURN TRUE END;
END;
RETURN FALSE;
END Mayoritario;

Mergesort
procedimiento fusionar(U[1..m+1], V[1..n+1], T[1..m+n])

{Fusionar las matrices ordenadas U[1..m] y V[1..n] almacenndolas en T[1..m+n],U[m+1] y


V[n+1] se utilizan como centinelas}
i, j 1
U[m+1], V[n+1]
para k 1 hasta m+n hacer
si U[i] < V[j]entonces
T[k] U[i];
ii+1
sino T[k] V[j];
jj+1
fsi
fpara
fprocedimiento

quicksort
procedimiento pivote (T[i..j]; var b)
p T[i]
ki
bj+1
repetir
kk+1
hasta que T[k] > p o k >= j frepetir
repetir
bb 1
hasta que T[b] <= p frepetir
mientras k < b hacer
intercambiar T[k] y T[b]
repetir
kk+1
hasta que T[k] > p frepetir
repetir

bb 1
hasta que T[b] <= p frepetir
fmientras;
intercambiar T[i] y T[b]
fprocedimiento

También podría gustarte