Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void vetorg_ordena_mel(vetorg* vec, comp ordem, int esq, int dir)
- {
- int a, b, pivot, tamanho = dir - esq + 1, med=(int)(esq+dir)/2;
- vg_elemento aux;
- if (tamanho < 2)
- return;
- else
- {
- if(ordem(vec->elementos[esq], vec->elementos[dir]) > 0 && ordem(vec->elementos[esq],vec->elementos[med]) < 0) pivot = esq;
- else if(ordem(vec->elementos[esq], vec->elementos[dir]) < 0 && ordem(vec->elementos[esq],vec->elementos[med]) > 0) pivot = esq;
- else if(ordem(vec->elementos[dir], vec->elementos[esq]) > 0 && ordem(vec->elementos[dir],vec->elementos[med]) < 0) pivot = dir;
- else if(ordem(vec->elementos[dir], vec->elementos[esq]) < 0 && ordem(vec->elementos[dir],vec->elementos[med]) > 0) pivot = dir;
- else pivot = med;
- aux = vec->elementos[pivot];
- vec->elementos[pivot] = vec->elementos[dir];
- vec->elementos[dir] = aux;
- a = esq;
- b = dir - 1;
- while(1)
- {
- while(ordem(vec->elementos[a], vec->elementos[dir]) <= 0 && a < dir) a++;
- while(ordem(vec->elementos[dir], vec->elementos[b]) < 0 && b >= 0) b--;
- if(a < b)
- {
- aux = vec->elementos[a];
- vec->elementos[a] = vec->elementos[b];
- vec->elementos[b] = aux;
- }
- else
- break;
- }
- aux = vec->elementos[a];
- vec->elementos[a] = vec->elementos[dir];
- vec->elementos[dir] = aux;
- vetorg_ordena_mel(vec, ordem, esq, a - 1);
- vetorg_ordena_mel(vec, ordem, a + 1, dir);
- }
- return;
- }
- int vetorg_ordena(vetorg* vec, comp ordem)
- {
- if(vec == NULL)
- return -1;
- vetorg_ordena_mel(vec, ordem, 0, vec->tamanho - 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement