Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. /***** Função menor()
  2.  * Descrição: encontra o menor elemento de um vetor
  3.  * Entrada:     vetor, a e b tal que vetor seja indexado por [a..b]
  4.  * Saída:      o índice do menor elemento
  5.  *****/
  6. int menor(int *v, int a, int b) {
  7.     int menor, i;
  8.    
  9.     menor = a;
  10.     for (i=a+1;i<=b;i++) {
  11.         if (v[i] < v[menor])
  12.             menor = i;
  13.     }
  14.     return menor;  
  15. }
  16.  
  17. /***** Função troca()
  18.  * Descrição: troca o valor entre duas variaveis inteiras
  19.  * Entrada:     o ponteiro para as duas variáveis a terem valores trocados
  20.  * Saída:      .
  21.  *****/
  22. void troca(int *a, int *b) {
  23.     int aux;
  24.     aux = *a;
  25.     *a = *b;
  26.     *b = aux;
  27. }
  28.  
  29. /***** Função selectionSort()
  30.  * Descrição: ordena um vetor por seleção
  31.  * Entrada:     vetor, a e b tal que vetor seja indexado por [a..b]
  32.  * Saída:      .
  33.  *****/
  34. void selectionSort(int *v, int a, int b) {
  35.     int m;
  36.    
  37.     // condição de parada
  38.     if (a >= b) // tamanho <= 1
  39.         return;
  40.    
  41.     m = menor(v, a, b);
  42.     troca(&v[a], &v[m]);
  43.     selectionSort(v, a+1, b);
  44. }
  45.  
  46. /***** Função particiona()
  47.  * Descrição: rearranja os maiores e menores elementos do vetor deixando o pivot no centro
  48.  * Entrada:     vetor, a e b tal que vetor seja indexado por [a..b], e o pivot
  49.  * Saída:      o índice do pivot
  50.  *****/
  51. int particiona(int *v, int a, int b) {
  52.     int i, j;
  53.    
  54.     // o pivot é sempre o último elemento, v[b]
  55.    
  56.     i = a-1;
  57.    
  58.     for (j=a;j<b;j++) {
  59.         if (v[j] <= v[b]) {
  60.             i++;
  61.             troca(&v[j], &v[i]);
  62.         }
  63.     }
  64.     // coloca o pivot no centro
  65.     i++;
  66.     troca(&v[i], &v[b]);
  67.    
  68.     return i;
  69. }
  70.  
  71. /***** Função quickSort()
  72.  * Descrição: ordena um vetor por quickSort
  73.  * Entrada:     vetor, a e b tal que vetor seja indexado por [a..b]
  74.  * Saída:      .
  75.  *****/
  76. void quickSort(int *v, int a, int b) {
  77.     int p;
  78.    
  79.     // condição de parada
  80.     if (a >= b)
  81.         return;
  82.  
  83.     p = particiona(v, a, b);
  84.    
  85.     quickSort(v, a, p-1);
  86.     quickSort(v, p+1, b);
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement