Advertisement
FoguinhoS

Functions

Apr 3rd, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <iterator>
  5. #include <iostream>
  6. #include <time.h>
  7.  
  8. using namespace std;
  9. float execTime;
  10. int addComparation;
  11. int addSwitch;
  12.  
  13.  
  14.  
  15. int vectorSize(int vector[]){
  16. return (sizeof(vector)/sizeof(int));
  17. }
  18.  
  19.  
  20. void show(int vetor[], int el){
  21.  
  22. for(int j = 0; j < el; j++){
  23. printf("%d,", vetor[j]);
  24. }
  25. }
  26.  
  27. void shellSort(int vet[], int size) {
  28. int i , j , value;
  29. int gap = 1;
  30. addComparation ++;
  31. while(gap < size) {
  32. addComparation ++;
  33. gap = 3*gap+1;
  34. }
  35. addComparation ++;
  36. while ( gap > 1) {
  37. addComparation ++;
  38. gap /= 3;
  39. for(i = gap; i < size; i++) {
  40. addComparation ++;
  41. value = vet[i];
  42. j = i - gap;
  43. addComparation ++;
  44. while (j >= 0 && value < vet[j]) {
  45. addComparation ++;
  46. vet [j + gap] = vet[j];
  47. addSwitch ++;
  48. j -= gap;
  49. }
  50. vet [j + gap] = value;
  51. addSwitch ++;
  52. }
  53. }
  54. }
  55.  
  56.  
  57. void heapsort(int a[], int n) {
  58.  
  59. int i = n / 2, pai, filho, t;
  60.  
  61. for (;;) {
  62. addComparation ++;
  63. if (i > 0) {
  64. i--;
  65. t = a[i];
  66. } else {
  67. n--;
  68. addComparation ++;
  69. if (n == 0) return;
  70. t = a[n];
  71. a[n] = a[0];
  72. addSwitch ++;
  73. }
  74.  
  75. pai = i;
  76.  
  77. //Primeiro será feita a comparação com o filho da esquerda.
  78. filho = i * 2 + 1;
  79. addComparation ++;
  80. while (filho < n) {
  81. addComparation ++;
  82. //Se o filho da esquerda for menor do que o filho da direita,então será feita a troca do filho que será comparado.
  83. addComparation ++;
  84. if ((filho + 1 < n) && (a[filho + 1] > a[filho])){
  85. filho++;
  86. }
  87. addComparation ++;
  88. if (a[filho] > t) {
  89. a[pai] = a[filho];
  90. addSwitch ++;
  91. pai = filho;
  92. filho = pai * 2 + 1;
  93. } else {
  94. break;
  95. }
  96. }
  97. a[pai] = t;
  98. addSwitch ++;
  99. }
  100. }
  101.  
  102.  
  103. void mergeSort(int *vetor, int posicaoInicio, int posicaoFim) {
  104. int i, j, k, metadeTamanho, *vetorTemp;
  105.  
  106. if(posicaoInicio == posicaoFim) return;
  107.  
  108. // ordenacao recursiva das duas metades
  109. metadeTamanho = (posicaoInicio + posicaoFim ) / 2;
  110. mergeSort(vetor, posicaoInicio, metadeTamanho);
  111. mergeSort(vetor, metadeTamanho + 1, posicaoFim);
  112.  
  113. // intercalacao no vetor temporario t
  114. i = posicaoInicio;
  115. j = metadeTamanho + 1;
  116. k = 0;
  117. vetorTemp = (int *) malloc(sizeof(int) * (posicaoFim - posicaoInicio + 1));
  118. addComparation ++;
  119. while(i < metadeTamanho + 1 || j < posicaoFim + 1) {
  120. addComparation ++;
  121. if (i == metadeTamanho + 1 ) { // i passou do final da primeira metade, pegar v[j]
  122. addSwitch ++;
  123. vetorTemp[k] = vetor[j];
  124. j++;
  125. k++;
  126. }
  127. else {
  128. addComparation ++;
  129. if (j == posicaoFim + 1) { // j passou do final da segunda metade, pegar v[i]
  130. addSwitch ++;
  131. vetorTemp[k] = vetor[i];
  132. i++;
  133. k++;
  134. }
  135. else {
  136. addComparation ++;
  137. if (vetor[i] < vetor[j]) {
  138. addSwitch ++;
  139. vetorTemp[k] = vetor[i];
  140. i++;
  141. k++;
  142. }
  143. else {
  144. addSwitch ++;
  145. vetorTemp[k] = vetor[j];
  146. j++;
  147. k++;
  148. }
  149. }
  150. }
  151.  
  152. }
  153. // copia vetor intercalado para o vetor original
  154. for(i = posicaoInicio; i <= posicaoFim; i++) {
  155. addSwitch ++;
  156. vetor[i] = vetorTemp[i - posicaoInicio];
  157. }
  158. free(vetorTemp);
  159. }
  160.  
  161. void quickSort(int valor[], int esquerda, int direita)
  162. {
  163. int i, j, x, y;
  164. i = esquerda;
  165. j = direita;
  166. x = valor[(esquerda + direita) / 2];
  167.  
  168. addComparation ++;
  169. while(i <= j)
  170. {
  171. addComparation ++;
  172. while(valor[i] < x && i < direita)
  173. {
  174. addComparation ++;
  175. i++;
  176. }
  177. while(valor[j] > x && j > esquerda)
  178. {
  179. addComparation ++;
  180. j--;
  181. }
  182. if(i <= j)
  183. {
  184. addComparation ++;
  185. addSwitch ++;
  186. y = valor[i];
  187. valor[i] = valor[j];
  188. valor[j] = y;
  189. i++;
  190. j--;
  191. }
  192. }
  193. if(j > esquerda)
  194. {
  195. addComparation ++;
  196. quickSort(valor, esquerda, j);
  197. }
  198. if(i < direita)
  199. {
  200. addComparation ++;
  201. quickSort(valor, i, direita);
  202. }
  203. }
  204.  
  205. void bubbleSort(int vetor[], int el){
  206. for(int i=el-1; i >= 1; i--) {
  207.  
  208. for( int j=0; j < i ; j++) {
  209. addComparation ++;
  210. if(vetor[j]>vetor[j+1]) {
  211. addSwitch ++;
  212. int aux = vetor[j];
  213. vetor[j] = vetor[j+1];
  214. vetor[j+1] = aux;
  215.  
  216. }
  217. }
  218. }
  219. }
  220.  
  221. void insertionSort(int vetor[], int el){
  222. int j,i,key;
  223. for(j = 1; j < el; j++){
  224. key = vetor[j];
  225. i = j - 1;
  226. addComparation ++;
  227. while(i >= 0 && vetor[i] > key){
  228. addComparation ++;
  229. vetor[i + 1] = vetor[i];
  230. addSwitch ++;
  231. i = i - 1;
  232. }
  233. vetor[i + 1] = key;
  234. addSwitch ++;
  235. }
  236. }
  237.  
  238. int main(){
  239.  
  240.  
  241.  
  242. int numElementos;
  243.  
  244. printf("Insira a quantidade de elementos do vetor: ");
  245. scanf("%i", &numElementos);
  246.  
  247. int vet[numElementos];
  248.  
  249. for(int i = 0; i < numElementos; i++) {
  250.  
  251. vet[i] = rand() % numElementos + 1;
  252.  
  253. }
  254.  
  255. int el = sizeof(vet)/sizeof(int);
  256.  
  257. addComparation = 0;
  258. addSwitch = 0;
  259. clock_t tStart = clock(); // INICIA RELOGIO
  260. shellSort(vet,el);
  261. printf("Time taken: %fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
  262. printf("Switch %d, Comparations %d\n\n\n\n",addSwitch,addComparation);
  263. //show(vet,el);
  264.  
  265.  
  266.  
  267.  
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement