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;

      }

   }

}
示例#2
0
文件: util.c 项目: taiar/tp0
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);
}