Ordenação

4
Ordenação Heap Sort TPA – Prof. Mateus Costa

description

Ordenação. Heap Sort TPA – Prof. Mateus Costa. void heapsort(char a[], int n) { int i = n/2, pai, filho; char t; for (;;) { if (i > 0) { i--; t = a[i]; } else { n--; if (n == 0) return; - PowerPoint PPT Presentation

Transcript of Ordenação

Page 1: Ordenação

Ordenação

Heap Sort

TPA – Prof. Mateus Costa

Page 2: Ordenação

Solução da Wikipediavoid heapsort(char a[], int n){ int i = n/2, pai, filho; char t; for (;;) { if (i > 0) { i--; t = a[i]; } else { n--; if (n == 0) return; t = a[n]; a[n] = a[0]; }

pai = i; filho = i*2 + 1; while (filho < n) { if ((filho + 1 < n) && (a[filho + 1] >

a[filho])) filho++; if (a[filho] > t) { a[pai] = a[filho]; pai = filho; filho = pai*2 + 1; } else break; } a[pai] = t; }}

Page 3: Ordenação

Minha Versão: Construindo o heap

void constroiHeap(char a[], int esq, int dir) { int i; char aux; i = (esq + dir)/2; while(i >=esq) { if ((a[2*i] < a[2*i+1]) && (2*i+1 <=dir)) troca(&a[2*i],&a[2*i+1]); if (a[i]<a[2*i]) troca(&a[i],&a[2*i]); i--; } }

Page 4: Ordenação

Minha Versão: Usando o Heap para ordenar

void meuHeapSort(char a[], int n) {

int esq=0,dir=n-1;

while(dir>1) {

constroiHeap(a,esq,dir);

troca(&a[esq],&a[dir]);

dir--;

}

}