Tempo de Execução Ordenada
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void preencherV(int V[],int v[], int n) {
srand(time(NULL));
int i;
for (i = 0; i < n; i++)
v[i] = V[i] ;
}
void preencher(int V[], int n) {
srand(time(NULL));
int i;
for (i = 0; i < n; i++)
V[i] = rand()%100;
}
void escreva(int l[], int n) {
int i;
for (i = 0; i < n; i++) {
printf("%d ", l[i]);
}
printf("\n");
}
void merge(int v[], int ini, int meio, int fim) {
int *vaux = (int *)malloc((fim - ini + 1) * sizeof(int));
int i, j, k;
i = ini;
j = meio + 1;
k = 0;
while (i <= meio && j <= fim) {
if (v[i] > v[j]) {
vaux[k] = v[i];
i++;
} else {
vaux[k] = v[j];
j++;
}
k++;
}
while (i <= meio) {
vaux[k] = v[i];
i++;
k++;
}
while (j <= fim) {
vaux[k] = v[j];
j++;
k++;
}
for (k = 0; k < (fim - ini + 1); k++) {
v[ini + k] = vaux[k];
}
free(vaux);
}
void mergesort(int v[], int ini, int fim) {
if (ini < fim) {
int meio = (ini + fim) / 2;
mergesort(v, ini, meio);
mergesort(v, meio + 1, fim);
merge(v, ini, meio, fim);
}
}
void insert(int n, int *v) {
int i = v[n - 1], j = n - 2;
if (n == 1)
return;
insert(n - 1, v);
for (j; j >= 0 && v[j] < i; j--) {
v[j + 1] = v[j];
}
v[j + 1] = i;
}
void troca(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void selection(int n, int *v, int j) {
int i;
int min = j;
if (j >= n - 1)
return;
for (i = j + 1; i < n; i++) {
if (v[min] < v[i]) {
min = i;
}
}
troca(&v[min], &v[j]);
selection(n, v, j + 1);
}
int particiona(int v[], int inicio, int fim){
int aux, i, ind;
aux = v[fim];
i = inicio;
for(ind = inicio; ind < fim; ind++){
if(v[ind] >= aux){
troca(&v[i], &v[ind]);
i++;
}
}
troca(&v[i], &v[ind]);
return i;
}
int particiona_random(int v[], int inicio, int fim){
int i = (rand() % (fim - inicio + 1)) + inicio;
troca(&v[i], &v[fim]);
return particiona(v, inicio, fim);
}
void quick_sort(int v[], int inicio, int fim){
if(inicio < fim){
int i = particiona_random(v, inicio, fim);
quick_sort(v, inicio, i - 1);
quick_sort(v, i + 1, fim);
}
}
int main() {
clock_t ini, fim;
double tempoinsert,temposelection,tempomerge,tempoclick;
int tamanho;
int entrada , opcaod,opcaoT;
printf("Digite o tamanho do vetor: ");
scanf("%d", &tamanho);
int V[tamanho];
int Vaux[tamanho];
printf("O Programa ira imprimir o vetor ou mostra o tempo conforme voce digita:(1)merge,(2)click,(3)insert e (4)selection SE voce Digitar (5) a operacao para:\n");
scanf("%d", &entrada);
preencher(V,tamanho);
while(entrada != 5){
if (entrada == 1) {
printf("Quer imprimir o Vetor com o merge(1) ou ver o tempo de execucao?");
scanf("%d", &opcaod);
if(opcaod == 1){
/*MERGE SORT*/
printf("MERGE SORT\n");
preencherV(V,Vaux,tamanho);
mergesort(Vaux, 0, tamanho - 1);
printf("Vetor Original:");
escreva(V,tamanho);
printf("Vetor ordenado:");
escreva(Vaux,tamanho);
}else if(opcaod == 2){
preencherV(V,Vaux,tamanho);
ini = clock();
mergesort(Vaux, 0, tamanho - 1);
fim = clock();
//calcula o tempo do Merge
tempomerge = (double)(fim - ini) * 1000 / CLOCKS_PER_SEC;
printf("O tempo de merge sort foi: %lf ms\n", tempomerge);
}
}
else if(entrada == 2) {
printf("Quer imprimir o Vetor com o quick(1) ou ver o tempo de execucao?");
scanf("%d", &opcaod);
if(opcaod == 1){
/*MERGE SORT*/
printf("QUICK SORT\n");
preencherV(V,Vaux,tamanho);
quick_sort(Vaux, 0, tamanho - 1);
printf("Vetor Original:");
escreva(V,tamanho);
printf("Vetor ordenado:");
escreva(Vaux,tamanho);
}
else if(opcaod == 2){
preencherV(V,Vaux,tamanho);
ini = clock();
quick_sort(Vaux, 0, tamanho - 1);
fim = clock();
//calcula o tempo do Quick
tempoclick = (double)(fim - ini) * 1000 / CLOCKS_PER_SEC;
printf("O tempo do quick foi: %lf ms\n", tempoclick);
}
}
else if (entrada == 3){
printf("Quer imprimir o Vetor com o insert(1) ou ver o tempo de execucao?");
scanf("%d", &opcaod);
if(opcaod == 1){
/*INSERT SORT*/
printf("INSERT SORT\n");
preencherV(V,Vaux,tamanho);
insert(tamanho,Vaux);
printf("Vetor Original:");
escreva(V,tamanho);
printf("Vetor ordenado:");
escreva(Vaux,tamanho);
}else if(opcaod == 2){
preencherV(V,Vaux,tamanho);
ini = clock();
insert(tamanho, Vaux);
fim = clock();
//calcula o tempo do insert
tempoinsert = (double)(fim - ini) * 1000 / CLOCKS_PER_SEC;
printf("O tempo de insert foi: %lf ms\n", tempoinsert);
}
}
else if (entrada == 4){
printf("Quer imprimir o Vetor com o Select(1) ou ver o tempo de execucao?");
scanf("%d", &opcaod);
if(opcaod == 1){
printf("SELECTION SORT\n");
preencherV(V,Vaux,tamanho);
selection(tamanho, Vaux, 0);
printf("Vetor Original:");
escreva(V,tamanho);
printf("Vetor ordenado:");
escreva(Vaux,tamanho);
}
else if(opcaod == 2){
printf("SELECTION SORT\n");
preencherV(V,Vaux,tamanho);
ini = clock();
selection(tamanho, Vaux, 0);
fim = clock();
//calcula o tempo do selection
temposelection = (double)(fim - ini) * 1000 / CLOCKS_PER_SEC;
printf("O tempo de selection foi: %lf ms\n", temposelection);
}
}
printf("Quer alterar o tamanho?:(1)sim (2)nao:");
scanf("%d",&opcaoT);
if(opcaoT == 1){
printf("Digite o novo tamanho:");
scanf("%d", &entrada);
}
printf("Digite o Metodo a ser usado de novo:");
scanf("%d", &entrada);
}
return 0;
}