Olá amigo, boa tarde. Belo código.
Infelizmente não consegui exito ainda, mesmo implementando sua struct estatística, quando executo meu código e seleciono a opção de ordenação uma tela de erro aparece pedindo para fechar o programa.
Ou seja, compila mas não reconhece o que utilizei.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define aleatorio 100
#define vetor1 15
#define bs 1
typedef struct{
int numcomp;
int numtrocas;
int tempo;
}ESTATISTICAS;
void menu();
void subMenu();
//void cronometro(clock_t start, clock_t end);
int* geraVetor(int tamanho);
void imprimeVetor(int *vet, int tamanho);
//algoritmos de ordenação
void bubbleSort(int vet[], int num, ESTATISTICAS* estatisticas);
int main(){
menu();
}
void menu(){
int continuar = 1;
do{
system("cls");
printf("### SELECIONE O METODO DE ORDENACAO ###\n");
printf("\n1 - BUBBLE SORT");
printf("\n2 - SELECTION SORT");
printf("\n3 - INSERTION SORT");
printf("\n4 - MOSTRAR RESULTADOS DE ORDENAÇÃO");
printf("\n0 - SAIR\n\n\n");
scanf("%d",&continuar);
system("cls");
switch(continuar){
case 1:
printf("### VETOR 15 POSICOES ###\n");
int *ptr;
ptr = geraVetor(vetor1);
//imprimeVetor(ptr, vetor1);
ESTATISTICAS* estatisticas;
clock_t start, end;
start = clock();
bubbleSort(ptr,vetor1, &estatisticas);
//imprimeVetor(ptr, vetor1);
end = clock();
//cronometro(start,end);
free(ptr);
printf("\nCOMPARACOES: %d",estatisticas->numcomp);
printf("\n\nTROCAS: %d", estatisticas->numtrocas);
//printf("\n\nTEMPO: %d",resultados->tempo);
printf("\n\n\n");
system("pause");
subMenu();
break;
}
}while(continuar);
}
void subMenu(){
int continuar = 1;
do{
system("cls");
printf("### VOLTAR AO MENU INICIAL ###\n");
printf("\n1 - SELECIONAR OUTRO ALGORITMO DE ORDENACAO");
printf("\n0 - SAIR\n\n\n");
scanf("%d",&continuar);
system("cls");
switch(continuar){
case 1:
main();
case 0:
exit(0);
break;
}
}while(continuar);
}
/*
void cronometro(clock_t start, clock_t end){
int tmpexe = (end - start)/ CLOCKS_PER_SEC;
int horas_seg = 3600;
tempo[0].hr = (tmpexe / horas_seg);
tempo[0].min = (tmpexe - (horas_seg * tempo[0].hr))/60;
tempo[0].seg = (tmpexe - (horas_seg * tempo[0].hr)- ( tempo[0].min *60));
}
/
int geraVetor(int tamanho) {
//int *ptr = malloc(tamanho * sizeof(int));
int *ptr = (int*) malloc(tamanho *sizeof(int));
for (int i = 0; i < tamanho; i++){
//atribui valores randomicos com base no intervalo da variavel aleatorio
ptr[i] = (rand() % aleatorio) + 1;
//verifica se existe valores iguais
for(int j=0; j < i; j++){
if(ptr[j] == ptr[i]){
ptr[i] = (rand() % aleatorio) + 1;
j=0;
}
}
}
return ptr;
}
void imprimeVetor(int *vet, int tamanho){
//exibe qualquer vetor
system("\n\n");
for(int i = 0; i < tamanho; i++){
printf("%d - %d |\n",i,vet[i]);
}
system("\n\n");
}
void bubbleSort(int vet[], int num, ESTATISTICAS* estatisticas){
int i, continua, aux, fim = num;
do{
continua = 0;
for(i = 0; i < fim -1; i++ ){
estatisticas->numcomp;
if(vet[i] > vet[i+1]){
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
estatisticas->numtrocas;
continua = 1;
}
}
fim--;
}while(continua != 0);
//rs[0].tempo = clock()/ CLOCKS_PER_SEC;
}