void QuickSortRecursivo(unsigned long *v, long p, long r, unsigned long *mov, unsigned long *comp) { long j; while (p < r) { j = Particao (v, p, r, mov, comp); if (j - p < r - j) { QuickSortRecursivo (v, p, j-1, mov, comp); p = j + 1; } else { QuickSortRecursivo (v, j+1, r, mov, comp); r = j - 1; } } }
void Ordena(unsigned int *v, unsigned int *u, int e, int d) { int i, j; Particao(v, u, e, d, &i, &j); if (e < j) Ordena(v, u, e, j); if (i < d) Ordena(v, u, i, d); }
void Ordena(int esq, int dir, TipoLista *Lista){ int i, j; Particao( esq, dir, &i, &j, Lista ); if( esq<j){ Ordena( esq, j, Lista); } if(i<dir){ Ordena(i, dir, Lista); } }
//Função Ordena: ela é a responsável pelo gerenciamento da ordenação das partições da lista void Ordena(ApontadorLista Esquerda,ApontadorLista Direita,TipoLista *Lista){ ApontadorLista i,j; Particao(Esquerda,Direita,&i,&j,Lista); //Se o Indice do ApontadorLista Esquerda for menor que o indice do ApontadorLista J //significa que ainda falta ordenar uma parte da lista , será feita uma nova //particiao a ordenar if(Esquerda->Indice < j->Indice){ //A lista particionada será de Esquerda até J Ordena(Esquerda,j,Lista); } //Se o Indice do ApontadorLista i for menor que o indice do ApontadorLista Direita //significa que ainda falta ordenar uma parte da lista , será feita uma nova //particiao a ordenar if(i->Indice < Direita->Indice){ //A lista particionada será de i até Direita Ordena(i,Direita,Lista); } }
void Ordena(int Esq, int Dir, Apontador * ponteiros, int tabelaAsc[256]){ int i, j; Particao(Esq, Dir, &i, &j, ponteiros, tabelaAsc); if (Esq < j) Ordena(Esq, j, ponteiros, tabelaAsc); if (i < Dir) Ordena(i, Dir, ponteiros, tabelaAsc); }