fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <memory.h>
  4. #include <float.h>
  5. #include <sys/time.h>
  6.  
  7. void get_top3(double k[3], const double* p, size_t n){
  8. size_t i;
  9. for (i = 0 ; i < 3 ; i++){
  10. k[i] = -DBL_MAX;
  11. }
  12. for (i = 0 ; i < n ; i++){
  13. int v = p[i];
  14. if (v > k[2] ){
  15. size_t j;
  16. for (j = 3 ; j > 0 ; j-- ){
  17. if (!(v > k[j-1])){
  18. break;
  19. }
  20. k[j-1] = k[j];
  21. }
  22. k[j] = v;
  23. }
  24. }
  25. }
  26.  
  27. double sec_count(void) {
  28. struct timeval tv;
  29. gettimeofday(&tv, NULL);
  30. return (double)tv.tv_sec + ((double)tv.tv_usec / 1000000.0);
  31. }
  32.  
  33. #define ELEMS 10000000
  34.  
  35. int main(void){
  36. double k[3];
  37. size_t i;
  38. double* p = (int*)malloc(ELEMS * sizeof(double));
  39. double s;
  40. double e;
  41.  
  42. for (i = 0 ; i < ELEMS ; i++){
  43. p[i] = rand();
  44. }
  45.  
  46. s = sec_count();
  47. get_top3(k, p, ELEMS);
  48. e = sec_count();
  49.  
  50. printf("top3 : %f %f %f\n", k[0], k[1], k[2]);
  51. printf("time : %.8f sec\n", e - s);
  52.  
  53. free(p);
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0.16s 79520KB
stdin
Standard input is empty
stdout
top3 : 2147483025.000000 2147482751.000000 2147478464.000000
time : 0.01423812 sec