Talvez você já tenha precisado disso, como eu precisei e tive certa dificuldade. Na verdade é bem simples, oque gera confusão é que muitas vezes o programa é executado tão rapidamente que recebe-se o retorno 0, principalmente se o tempo for mostrado em segundos.
Para a maioria dos casos o ideal é mostra em milissegundos.
Biblioteca time.h
Para fazer uso da função que irá retornar o tempo de execução de um programa é necessário chamar a biblioteca time.h. Aqui no blog já falei sobre ela para fazer o uso das funções rand e srand, para geração de valores aleatórios.Para chamar essa biblioteca basta por no cabeçalho do seu programa:
#include <time.h>
Dessa vez faremos o uso da função clock, do tipo clock_t, e da macro CLOCKS_PER_SEC.
Função clock() e a macro CLOCKS_PER_SEC
A função clock retorna o tempo de execução exato do momento em que ela foi chamada. Para encontrar o tempo de execução de um programa precisamos usar ela duas vezes, uma para capturar o tempo inicial e outra para capturar o tempo final da execução.Se fizermos o tempo final - tempo inicial teremos o tempo de execução do programa em milissegundos. Dividindo esse valor pelo CLOCKS_PER_SEC teremos este valor em segundos, pois esta constante tem o valor de 1000000. Para obter o valor em milissegundos, pode-se dividir o CLOCKS_PER_SEC por 1000.
E onde se encaixo o clock_t?
A variável que irá armazenar o valor do tempo da função clock deve ser do tipo clock_t.
Vamos a um exemplo simples usando um algoritmo de ordenção bubble sort:
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //clock(), CLOCKS_PER_SEC e clock_t
#define TAM 10000 //constante para tamanho do vetor
int RandomInteger(int low, int high)
{
int k;
srand( (unsigned)time(NULL) );
k = (rand() % high) + low;
return k;
}
void bubbleSort (int v[TAM]) {
int a, b, aux;
for (a=TAM-1; a>=1; a--) {
for (b=0; b<a; b++) {
if (v[b]>v[b+1]) {
aux = v[b];
v[b] = v[b+1];
v[b+1] = aux;
}
}
}
}
int main(){
clock_t t; //variável para armazenar tempo
int vetor[TAM]; //vetor com 10000 posições
int p, r, a;
p = 0;
r = TAM;
//geração aleatório dos valores do vetor
for(a = 0; a < TAM; a++)
vetor[a] = RandomInteger(0, TAM);
//Verificando tempo de execução do bubble sort=> t2
t = clock(); //armazena tempo
bubbleSort(vetor);
t = clock() - t; //tempo final - tempo inicial
//imprime o tempo na tela
printf("Tempo de execucao: %lf", ((double)t)/((CLOCKS_PER_SEC/1000))); //conversão para double
}
Observe que ao imprimir o tempo em segundos, como explicado anteriormente, o CLOCKS_PER_SEC foi dividido por 1000, para apresentar o tempo em milissegundos.


