fork download
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. // Estrutura para o nó da árvore binária
  7. struct Node {
  8. int data;
  9. struct Node* left;
  10. struct Node* right;
  11. };
  12.  
  13. // Funções para inserção da árvore binária
  14. struct Node* newNode(int data) {
  15. struct Node* node = (struct Node*)malloc(sizeof(struct Node));
  16. node->data = data;
  17. node->left = node->right = NULL;
  18. return node;
  19. }
  20.  
  21. struct Node* insert(struct Node* node, int data) {
  22. if (node == NULL) return newNode(data);
  23. if (data < node->data)
  24. node->left = insert(node->left, data);
  25. else
  26. node->right = insert(node->right, data);
  27. return node;
  28. }
  29.  
  30. // Função de ordenação: Selection Sort
  31. void selectionSort(int arr[], int n, int* comparisons) {
  32. int i, j, min_idx, temp;
  33. for (i = 0; i < n - 1; i++) {
  34. min_idx = i;
  35. for (j = i + 1; j < n; j++) {
  36. (*comparisons)++;
  37. if (arr[j] < arr[min_idx])
  38. min_idx = j;
  39. }
  40. temp = arr[min_idx];
  41. arr[min_idx] = arr[i];
  42. arr[i] = temp;
  43. }
  44. }
  45.  
  46. // Função para gerar um vetor de inteiros únicos aleatórios
  47. void generateRandomArray(int arr[], int size) {
  48. int i, num, exists;
  49. for (i = 0; i < size; i++) {
  50. do {
  51. exists = 0;
  52. num = rand() % 1000 + 1;
  53. for (int j = 0; j < i; j++) {
  54. if (arr[j] == num) {
  55. exists = 1;
  56. break;
  57. }
  58. }
  59. } while (exists);
  60. arr[i] = num;
  61. }
  62. }
  63.  
  64. // Função para imprimir a árvore binária em ordem
  65. void printInOrder(struct Node* node) {
  66. if (node != NULL) {
  67. printInOrder(node->left); // Visita o filho à esquerda
  68. printf("%d ", node->data); // Imprime o valor do nó
  69. printInOrder(node->right); // Visita o filho à direita
  70. }
  71. }
  72.  
  73. // Função para imprimir a árvore binária em pré-ordem
  74. void printPreOrder(struct Node* node) {
  75. if (node != NULL) {
  76. printf("%d ", node->data); // Imprime o valor do nó
  77. printPreOrder(node->left); // Visita o filho à esquerda
  78. printPreOrder(node->right); // Visita o filho à direita
  79. }
  80. }
  81.  
  82. int main() {
  83. // Parte 1: Exibir nomes e matrículas
  84. printf("Alunos:\n");
  85. printf("Endryo Tavares - 202051054689\n");
  86. printf("Pedro Guilherme - 202308418858\n");
  87. printf("Pedro Vanderlei - 202402821865\n");
  88.  
  89. // Parte 2: Geração e Ordenação de Vetor
  90. int arr[100];
  91. int comparisons = 0;
  92. generateRandomArray(arr, 100);
  93.  
  94. // Calcula o tempo de execução
  95. clock_t start, end;
  96. start = clock();
  97.  
  98. // Realizando Selection Sort
  99. printf("\nUtilizando Selection Sort para ordenação...\n");
  100. selectionSort(arr, 100, &comparisons);
  101.  
  102. end = clock();
  103. double time_spent = (double)(end - start) / CLOCKS_PER_SEC;
  104.  
  105. // Parte 3: Apresentar resultados
  106. printf("Vetor ordenado: ");
  107. for (int i = 0; i < 100; i++) {
  108. printf("%d ", arr[i]);
  109. }
  110. printf("\nComparações realizadas: %d\n", comparisons);
  111. printf("Tempo de execução: %f segundos\n", time_spent);
  112.  
  113. // Parte 4: Construção da Árvore Binária
  114. struct Node* root = NULL;
  115. for (int i = 0; i < 100; i++) {
  116. root = insert(root, arr[i]);
  117. }
  118.  
  119. // Parte 5: Impressão da árvore binária
  120. printf("\nÁrvore Binária em ordem: ");
  121. printInOrder(root);
  122. printf("\n");
  123.  
  124. // Parte 6: Impressão da árvore binária em pré-ordem
  125. printf("Árvore Binária em pré-ordem: ");
  126. printPreOrder(root);
  127. printf("\n");
  128.  
  129. // Finalização
  130. printf("\n\nAgradecemos a presença de todos!\n");
  131.  
  132. return 0;
  133. }
  134.  
  135.  
Success #stdin #stdout 0s 5276KB
stdin
Standard input is empty
stdout
Alunos:
Endryo Tavares - 202051054689
Pedro Guilherme - 202308418858
Pedro Vanderlei - 202402821865

Utilizando Selection Sort para ordenação...
Vetor ordenado: 12 13 23 28 43 44 59 60 61 68 70 85 88 92 95 124 125 136 168 171 173 179 199 212 227 230 277 282 306 314 316 325 328 336 337 363 365 368 369 371 374 379 384 387 394 400 404 414 422 427 430 435 457 493 506 527 531 538 540 541 546 568 571 583 585 587 650 652 677 691 730 737 740 751 755 764 778 783 785 789 794 796 803 809 815 847 858 863 874 887 896 916 920 926 927 930 933 957 981 997 
Comparações realizadas: 4950
Tempo de execução: 0.000000 segundos

Árvore Binária em ordem: 12 13 23 28 43 44 59 60 61 68 70 85 88 92 95 124 125 136 168 171 173 179 199 212 227 230 277 282 306 314 316 325 328 336 337 363 365 368 369 371 374 379 384 387 394 400 404 414 422 427 430 435 457 493 506 527 531 538 540 541 546 568 571 583 585 587 650 652 677 691 730 737 740 751 755 764 778 783 785 789 794 796 803 809 815 847 858 863 874 887 896 916 920 926 927 930 933 957 981 997 
Árvore Binária em pré-ordem: 12 13 23 28 43 44 59 60 61 68 70 85 88 92 95 124 125 136 168 171 173 179 199 212 227 230 277 282 306 314 316 325 328 336 337 363 365 368 369 371 374 379 384 387 394 400 404 414 422 427 430 435 457 493 506 527 531 538 540 541 546 568 571 583 585 587 650 652 677 691 730 737 740 751 755 764 778 783 785 789 794 796 803 809 815 847 858 863 874 887 896 916 920 926 927 930 933 957 981 997 


Agradecemos a presença de todos!