Escolar Documentos
Profissional Documentos
Cultura Documentos
12 de Junho de 2015
// inicializa a fila
// insere um inteiro na fila
// devolve o menor inteiro na fila
// retira o menor inteiro na fila
(5) (3 valores) Implemente o mtodo void ordena(int[] v, int n) que ordena uma matriz v de n
inteiros por ordem crescente, de acordo com o algoritmo de seleo direta. Analise a eficincia
do algoritmo justificando os resultados indicados.
12 de Junho de 2015
12 de Junho de 2015
(2) (3 valores)
public class lista{
protected static final int lim=100;
protected char [] ve=new char[lim];
protected int prim, ult;
protected static int seg(int i){return (i+1)%lim;}
public void nova(){
prim=-1;
ult= -1;
}
public void acr(char n){
if(seg(ult)== prim) throw new IllegalStateException (
"Erro: capacidade da fila excedida!");
else {
ult=seg(ult);
ve[ult]=n;
if(prim==-1) prim=0;
}
}
void retiraprim(){
if(prim==-1) throw new IllegalStateException ("Erro: fila vazia!");
else {
if(prim!=ult)
prim=seg(prim);
else{
prim=-1;
ult=-1;
}
}
}
boolean existe(char c){
if(prim==-1) return false;
else { boolean encontrei = ve[k] == c;
int k = seg(prim);
while(k!=seg(ult) && !encontrei){
if(ve[k] == c) encontrei == true;
k=seg(k);
}
return encontrei;
}
}
(3) (3 valores)
public class lista{
protected class NO{
char val;
NO seg;
}
protected NO prim, ult;
public void nova(){
prim=null;
ult= null;
}
public void acr(char n){
No aux=new No();
aux.val=n;
aux.seg= null;
if(prim != null) ult.seg = aux;
else prim=aux;
ult=aux;
}
void retiraprim(){
if(prim != null){
prim = prim.seg;
if(prim == null) ult = null;
}
else throw new IllegalStateException (Erro: lista vazia!);
}
boolean existe(char c){
if(prim==null) return false;
else { boolean encontrei = false;
int k = prim;
while(k!=null && !encontrei){
if(ve[k] == c) encontrei == true;
k= k.seg;
}
return encontrei;
}
}
12 de Junho de 2015
12 de Junho de 2015
(4) (5 valores)
public class FilaPriHeap implements FilaPri{
protected static final int lim=100;
protected int[] ve=new int[lim+1];
protected int n_elementos;
public void nova(){n_elementos=0;}
public void insere(int n){
if(n_elementos!=lim){
int posicao = ++n_elementos;
while(posicao>1 && n<ve[posicao/2]){
ve[posicao]=ve[posicao/2];
posicao = posicao/2;
}
ve[posicao]=n;
}
else throw new IllegalStateException("Erro: capacidade da fila prioritria excedida!");
}
public int menor(){
if(n_elementos!=0) return ve[1];
else throw new IllegalStateException("Erro: fila prioritria vazia!");
}
public void retira(){
if(n_elementos!=0){
int posicao=1, menordescendente;
int aux = ve[n_elementos--];
boolean auxmenordescendente = true ;
while(posicao *2<=n_elementos && auxmenordescendente){
menordescendente=posicao*2;
if( menordescendente != n_elementos &&
ve[menordescendente+1]<ve[menordescendente])
menordescendente++;
if(aux<ve[menordescendente]) auxmenordescendente = false ;
else {
ve[posicao]=ve[menordescendente];
posicao = menordescendente;
}
}
ve[posicao]=aux;
}else throw new IllegalStateException("Erro: fila prioritria vazia!");
}
(5) (3 valores)
void ordena(int[] v, int n){
Contacto x;
for(int k = 0; k <= n-2; k++){
int pos = n-1;
for(int i=n-2; i >= k; i--)
if(v[i]>v[pos]) pos = i;
x = v[k]; v[k] = v[pos]; v[pos] = x;
}
}
C(n) = k=0..n-2(i=k..n-2 1) = (n2 n)/2
M(n) = k=0..n-2 3 = 3(n 1)
12 de Junho de 2015