#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <float.h>
#include <sys/time.h>
void get_top3(double k[3], const double* p, size_t n){
size_t i;
for (i = 0 ; i < 3 ; i++){
k[i] = -DBL_MAX;
}
for (i = 0 ; i < n ; i++){
int v = p[i];
if (v > k[2] ){
size_t j;
for (j = 2 ; j > 0 ; j-- ){
if (!(v > k[j-1])){
break;
}
k[j] = k[j-1];
}
k[j] = v;
}
}
}
double sec_count(void) {
struct timeval tv;
gettimeofday(&tv, NULL);
return (double)tv.tv_sec + ((double)tv.tv_usec / 1000000.0);
}
#define ELEMS 10000000
int main(void){
double k[3];
size_t i;
double* p
= (int*)malloc(ELEMS
* sizeof(double)); double s;
double e;
for (i = 0 ; i < ELEMS ; i++){
}
s = sec_count();
get_top3(k, p, ELEMS);
e = sec_count();
printf("top3 : %f %f %f\n", k
[0], k
[1], k
[2]); printf("time : %.8f sec\n", e
- s
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1lbW9yeS5oPgojaW5jbHVkZSA8ZmxvYXQuaD4KI2luY2x1ZGUgPHN5cy90aW1lLmg+Cgp2b2lkIGdldF90b3AzKGRvdWJsZSBrWzNdLCBjb25zdCBkb3VibGUqIHAsIHNpemVfdCBuKXsKCXNpemVfdCBpOwoJZm9yIChpID0gMCA7IGkgPCAzIDsgaSsrKXsKCQlrW2ldID0gLURCTF9NQVg7Cgl9Cglmb3IgKGkgPSAwIDsgaSA8IG4gOyBpKyspewoJCWludCB2ID0gcFtpXTsKCQlpZiAodiA+IGtbMl0gKXsKCQkJc2l6ZV90IGo7CgkJCWZvciAoaiA9IDIgOyBqID4gMCA7IGotLSApewoJCQkJaWYgKCEodiA+IGtbai0xXSkpewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJa1tqXSA9IGtbai0xXTsKCQkJfQoJCQlrW2pdID0gdjsKCQl9Cgl9Cn0KCmRvdWJsZSBzZWNfY291bnQodm9pZCkgewogICAgc3RydWN0IHRpbWV2YWwgdHY7CiAgICBnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKCXJldHVybiAoZG91YmxlKXR2LnR2X3NlYyArICgoZG91YmxlKXR2LnR2X3VzZWMgLyAxMDAwMDAwLjApOwp9CgojZGVmaW5lIEVMRU1TIDEwMDAwMDAwCgppbnQgbWFpbih2b2lkKXsKCWRvdWJsZSBrWzNdOwoJc2l6ZV90IGk7Cglkb3VibGUqIHAgPSAoaW50KiltYWxsb2MoRUxFTVMgKiBzaXplb2YoZG91YmxlKSk7Cglkb3VibGUgczsKCWRvdWJsZSBlOwoKCWZvciAoaSA9IDAgOyBpIDwgRUxFTVMgOyBpKyspewoJCXBbaV0gPSByYW5kKCk7Cgl9CgoJcyA9IHNlY19jb3VudCgpOwoJZ2V0X3RvcDMoaywgcCwgRUxFTVMpOwoJZSA9IHNlY19jb3VudCgpOwoKCXByaW50ZigidG9wMyA6ICVmICVmICVmXG4iLCBrWzBdLCBrWzFdLCBrWzJdKTsKCXByaW50ZigidGltZSA6ICUuOGYgc2VjXG4iLCBlIC0gcyk7CgoJZnJlZShwKTsKCXJldHVybiAwOwp9Cg==