RE:Medir el tiempo de ejecucion del programa
Yo creo que eso no funcionará, ¿no? El problema que está teniendo es por la precisión del reloj del sistema. Cuando tú pides el tiempo o la hora al sistema, o cuando haces un sleep, puedes obtener precisión hasta de milisegundos, pero es una precisión fantasma. Realmente el reloj del sistema avanza un ciclo cada mucho más tiempo (depende de muchas cosas, pero en MS-DOS era 18.2 ciclos por segundo). Por tanto si haces algo muy rápido, puede que no haya saltado ningún ciclo durante ese tiempo, y parezca que no ha pasado tiempo.
Meter retardos supone que se tarda más por el retardo. Pero el retardo no es preciso, y, además, creo que no sirve. Si a algo que no tarda "nada" en ejecutarse le metes un retardo de 1 segundo, el resultado final será 1 segundo, y seguirás sin saber nada.
En realidad existe otra solución, que funciona en MS-DOS, pero no en Windows. Y es programar el reloj del sistema para obligarle a que sus ciclos sean más cortos. Por ejemplo, forzarle a ir a 10000 ciclos por segundo. Conseguir esto es posible, pero es un poco liosillo, y en Windows no se puede (Windows no te deja que programes el reloj, porque lo utiliza para la multitarea y es un recurso demasiado importante). A si es que lo de ejecutar el algoritmo muchas veces me parece la mejor solución.
Suerte!