luishenriique

Untitled

May 16th, 2013
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "ordena.h"
  3.  
  4. //----------------Algoritmo de ordenação Bubble Sort------------------//
  5. int bubbleSort(pessoa *vetor, int tamanho){
  6.  
  7. int i, j = 1,n = 0, cont = 0;
  8. pessoa aux[1];
  9. while(n < tamanho && j == 1)
  10. {
  11. j = 0;
  12. for(i = 0; i < (tamanho - 1); i++)
  13. {
  14. cont++;
  15. if(vetor[i].id > vetor[i+1].id)
  16. {
  17. j = 1;
  18. aux[0] = vetor[i];
  19. vetor[i] = vetor[i+1];
  20. vetor[i+1] = aux[0];
  21. }
  22. }
  23. tamanho = tamanho -1;
  24. }
  25. return cont;
  26. }
  27. //-----------------------------------------------------------------------//
  28.  
  29. //----------------Algoritmo de ordenação Merge Sort----------------------//
  30. int mergeSort (pessoa *vetor, int inicio, int fim){
  31. int meio;
  32. int x = 0, y = 0, z = 0, cont = 0;
  33. if (inicio < fim)
  34. {
  35. meio = (inicio + fim)/2;
  36. x = mergeSort (vetor, inicio, meio);
  37. y = mergeSort (vetor, meio + 1, fim);
  38. z = intercala (vetor, inicio, fim, meio);
  39. cont = cont + x + y + z;
  40. }
  41. return cont;
  42. }
  43.  
  44. int intercala(pessoa *vetor, int inicio, int fim, int meio){
  45. int i, cont = 0;
  46. int inicio_vetor1 = inicio;
  47. int inicio_vetor2 = meio + 1;
  48. int poslivre = inicio;
  49. pessoa aux[(fim + inicio) + 1];
  50.  
  51. while (inicio_vetor1 <= meio && inicio_vetor2 <= fim)
  52. {
  53. cont++;
  54. if (vetor[inicio_vetor1].id <= vetor[inicio_vetor2].id)
  55. {
  56. aux[poslivre] = vetor[inicio_vetor1];
  57. inicio_vetor1 = inicio_vetor1 + 1;
  58. }
  59. else
  60. {
  61. aux[poslivre] = vetor[inicio_vetor2];
  62. inicio_vetor2 = inicio_vetor2 + 1;
  63. }
  64. poslivre = poslivre + 1;
  65. }
  66.  
  67. //Se ainda exixtem numeros no primeiro vetor
  68. //que não foram intercalados
  69. for (i = inicio_vetor1 ; i <= meio ; i++)
  70. {
  71. aux[poslivre] = vetor[i];
  72. poslivre = poslivre + 1;
  73. }
  74.  
  75. //Se ainda exixtem numeros no segundo vetor
  76. //que não foram intercalados
  77. for (i = inicio_vetor2 ; i <= fim ; i++)
  78. {
  79. aux[poslivre] = vetor[i];
  80. poslivre = poslivre + 1;
  81. }
  82.  
  83. //Retorna os valores do vetor "aux" para o vetor "vetor"
  84. for (i = inicio ; i<=fim ; i++)
  85. {
  86. vetor[i] = aux[i];
  87. }
  88. return cont;
  89. }
  90. //-----------------------------------------------------------------------//
  91.  
  92. //----------------Algoritmo de ordenação Selection Sort------------------//
  93. int selectionSort(pessoa *vetor, int tamanho){
  94. int i, j, cont, pos;
  95. pessoa eleito[1], menor[1];
  96.  
  97. i = 0;
  98. j = 0;
  99. cont = 0;
  100. //Ordenando de forma crescente
  101. //laço que percorre da 1ª posição
  102. //à penúltima do vetor
  103. //elegendo um número para ser comparado
  104. for (i = 0 ; i < (tamanho - 1) ; i++)
  105. {
  106. eleito[0] = vetor[i];
  107.  
  108. menor[0] = vetor[i+1]; // Encontrando o menor número à direita do eleito com sua respectiva posição
  109. pos = i+1; // posição do eleito = i, primeiro número à direita do
  110. // eleito na posição = i + 1
  111.  
  112. for (j = i+1 ; j < tamanho ; j++) //Laço que percorre os elementos que estão à direita do
  113. { //número eleito, retornando o menor número à direita
  114. cont++ ; //e sua posição
  115. if (vetor[j].id < menor[0].id)
  116. {
  117. menor[0] = vetor[j];
  118. pos = j;
  119. }
  120.  
  121. }
  122. cont++;
  123. if (menor[0].id < eleito[0].id) //Troca do número eleito com o número da posição pos
  124. { //O número da posição pos é o menor número à direita
  125. vetor[i] = vetor[pos]; //do número eleito
  126. vetor[pos] = eleito[0];
  127. }
  128.  
  129. }
  130.  
  131. return cont;
  132. }
  133. //-----------------------------------------------------------------------//
  134.  
  135. //----------------Algoritmo de ordenação Quick Sort----------------------//
  136. int quickSort (pessoa *vetor, int inicio, int fim){
  137. int meio, cont, x, y, z;
  138.  
  139. cont = 0;
  140. if (inicio < fim)
  141. {
  142. cont++;
  143. meio = particao(vetor, inicio, fim);
  144. x = quickSort(vetor, inicio, meio);
  145. y = quickSort(vetor, (meio+1), fim);
  146. cont = cont + x + y;
  147. }
  148. return cont;
  149. }
  150.  
  151. int particao (pessoa *vetor, int inicio, int fim){
  152. int i, j;
  153. pessoa pivo[1];
  154.  
  155. pivo[0] = vetor[(inicio+fim)/2];
  156. i = inicio-1;
  157. j = fim+1;
  158.  
  159. while (i < j)
  160. {
  161. do
  162. {
  163. j = j-1;
  164. } while (vetor[j].id > pivo[0].id);
  165.  
  166. do
  167. {
  168. i = i+1;
  169. } while (vetor[i].id < pivo[0].id);
  170.  
  171. if (i < j) troca (vetor, i, j);
  172. }
  173. return j;
  174. }
  175.  
  176. void troca (pessoa *vetor, int i, int j){
  177. pessoa aux[1];
  178.  
  179. aux[0] = vetor[i];
  180. vetor[i] = vetor[j];
  181. vetor[j] = aux[0];
  182. }
  183. //-----------------------------------------------------------------------//
  184.  
  185. //----------------Algoritmo de ordenação Heap Sort----------------------//
  186. void transforma_heap (int qtde){
  187. int i, pai, aux;
  188.  
  189. for (i = qtde/2 ; i >= 1 ; i--)
  190. {
  191. heap_fica (i, qtde);
  192. }
  193. }
  194.  
  195. void heap_fica (int i, int qtde){
  196. int f_esq, f_dir, maior, aux;
  197. maior = 1;
  198.  
  199. if ((2*i)+1 <= qtde)
  200. {
  201. f_esq = (2*i)+1;
  202. f_dir = 2*i;
  203.  
  204. if ((vetor[f_esq].id >= vetor[f_dir].id) && (vetor[f_esq].id > vetor[i].id))
  205. maior = i;
  206. else
  207. if ((vetor[f_dir].id > vetor[f_esq].id) && (vetor[f_dir].id > vetor[i].id))
  208. maior = 2*i;
  209. }
  210. else
  211. if (2*i <= qtde )
  212. {
  213. f_dir = 2*i;
  214. if (vetor[f_dir].id > vetor[i].id)
  215. maior = 2*i;
  216. }
  217. if (maior != i)
  218. {
  219. aux[0] = vetor[i];
  220. vetor[i] = vetor[maior];
  221. vetor[maior] = aux[0];
  222. heap_fica (maior, qtde);
  223. }
  224. }
  225.  
  226.  
  227.  
  228. //-----------------------------------------------------------------------//
Advertisement
Add Comment
Please, Sign In to add comment