Пример #1
0
void construir(Heap heap,int n,int *pos){		//constroi o heap segundo a ordem: 
	int esq= n/2+1;					//um elemento na posicao i tem que ser menor que um
	while (esq>1){					//elemento na posicao 2i e nao posicao 2i+1
		esq--;
		refazer(heap,esq,n,pos);
	}
}
Пример #2
0
void construir(int *a, int *n,int *copias,int *comparacoes) {
	int esq = *n/2 + 1;
	*copias += 1;
	while (esq > 1) {		
		*comparacoes += 1;
		esq--;
		*copias += 1;
		refazer(esq,*n, a,copias,comparacoes);
	}
}
Пример #3
0
CelulaHeap retirarmenor(Heap heap,int *n,int *pos){	//retira o elemento na posicao 1 do heap,
	CelulaHeap minimo;				//o troca com a última posicao, decrementa a qtd e refaz o heap.
	if ((*n)>=1){
		minimo=heap[1];
		heap[1]=heap[(*n)];
		pos[heap[(*n)].vertice]=1;
		heap[(*n)]=minimo;
		pos[minimo.vertice]=(*n);
		(*n)--;
		refazer(heap,1,*n,pos);
	}
	return(minimo);
}
Пример #4
0
void heapsort(int *a, int *n,int *copias,int *comparacoes) {
	int esq, dir;
	int x;
	construir(a, n,copias,comparacoes);   /*constroi o heap*/
	esq = 1; 
	dir = *n;
	*copias += 2;
	while (dir > 1) { /*ordena o vetor*/
		*comparacoes += 1;
		x = a[1]; 
		a[1] = a[dir];
		a[dir] = x;
		dir--;
		*copias += 4;
		refazer(esq, dir, a,copias,comparacoes);
	}
}