Advertisement
Guest User

noob

a guest
Mar 30th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.55 KB | None | 0 0
  1. void vetorg_ordena_mel(vetorg* vec, comp ordem, int esq, int dir)
  2. {
  3.     int a, b, pivot, tamanho = dir - esq + 1, med=(int)(esq+dir)/2;
  4.     vg_elemento aux;
  5.  
  6.     if (tamanho < 2)
  7.         return;
  8.     else
  9.     {
  10.  
  11.         if(ordem(vec->elementos[esq], vec->elementos[dir]) > 0 && ordem(vec->elementos[esq],vec->elementos[med]) < 0) pivot = esq;
  12.         else if(ordem(vec->elementos[esq], vec->elementos[dir]) < 0 && ordem(vec->elementos[esq],vec->elementos[med]) > 0) pivot = esq;
  13.         else if(ordem(vec->elementos[dir], vec->elementos[esq]) > 0 && ordem(vec->elementos[dir],vec->elementos[med]) < 0) pivot = dir;
  14.         else if(ordem(vec->elementos[dir], vec->elementos[esq]) < 0 && ordem(vec->elementos[dir],vec->elementos[med]) > 0) pivot = dir;
  15.         else pivot = med;
  16.  
  17.         aux = vec->elementos[pivot];
  18.         vec->elementos[pivot] = vec->elementos[dir];
  19.     vec->elementos[dir] = aux;
  20.  
  21.         a = esq;
  22.         b = dir - 1;
  23.         while(1)
  24.         {
  25.             while(ordem(vec->elementos[a], vec->elementos[dir]) <= 0 && a < dir) a++;
  26.             while(ordem(vec->elementos[dir], vec->elementos[b]) < 0 && b >= 0) b--;
  27.  
  28.             if(a < b)
  29.             {
  30.                 aux = vec->elementos[a];
  31.                 vec->elementos[a] = vec->elementos[b];
  32.                 vec->elementos[b] = aux;
  33.             }
  34.             else
  35.                 break;
  36.         }
  37.  
  38.         aux = vec->elementos[a];
  39.         vec->elementos[a] = vec->elementos[dir];
  40.         vec->elementos[dir] = aux;
  41.  
  42.         vetorg_ordena_mel(vec, ordem, esq, a - 1);
  43.         vetorg_ordena_mel(vec, ordem, a + 1, dir);
  44.     }
  45.     return;
  46. }
  47.  
  48. int vetorg_ordena(vetorg* vec, comp ordem)
  49. {
  50.     if(vec == NULL)
  51.         return -1;
  52.  
  53.         vetorg_ordena_mel(vec, ordem, 0, vec->tamanho - 1);
  54.  
  55.         return 0;
  56.  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement