#include <stddef.h>
const void *min_element(void *ptr, size_t cnt, size_t size, int (*comp)(const void *, const void *))
{
const void *min;
size_t i;
if (!cnt) return NULL;
min = ptr;
for(i = 1; i < cnt; ++i)
if (comp(min, (const char*)ptr + size * i) > 0)
min = (const char*)ptr + size * i;
return min;
}
#include <stdio.h>
#include <string.h>
int compare_ints(const void* a, const void* b)
{
int arg1 = *(const int*)a;
int arg2 = *(const int*)b;
if(arg1 < arg2) return -1;
if(arg1 > arg2) return 1;
return 0;
}
int compare_strings(const void* a, const void* b)
{
return strcmp(*((char**) a
), *((char**) b
)); }
int main()
{
int foo[] = {75, 72, 98, -84, 63};
const char *bar[] = {"Blah", "Blupp", "Aachen", "Zeppelin", "Foobar"};
printf("Integerminimum ist: %d\n", *(int*) min_element
(foo
, sizeof(foo
)/sizeof(*foo
), sizeof(*foo
), compare_ints
)); printf("Stringminimum ist: %s\n", *(const char**) min_element
(bar
, sizeof(bar
)/sizeof(*bar
), sizeof(*bar
), compare_strings
)); return 0;
}
I2luY2x1ZGUgPHN0ZGRlZi5oPgoKY29uc3Qgdm9pZCAqbWluX2VsZW1lbnQodm9pZCAqcHRyLCBzaXplX3QgY250LCBzaXplX3Qgc2l6ZSwgaW50ICgqY29tcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQp7CiAgY29uc3Qgdm9pZCAqbWluOwogIHNpemVfdCBpOwoKICBpZiAoIWNudCkgcmV0dXJuIE5VTEw7CiAgCiAgbWluID0gcHRyOwogIGZvcihpID0gMTsgaSA8IGNudDsgKytpKQogICAgaWYgKGNvbXAobWluLCAoY29uc3QgY2hhciopcHRyICsgc2l6ZSAqIGkpID4gMCkKICAgICAgbWluID0gKGNvbnN0IGNoYXIqKXB0ciArIHNpemUgKiBpOwoKICByZXR1cm4gbWluOwp9CgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50IGNvbXBhcmVfaW50cyhjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKSAgCnsKICBpbnQgYXJnMSA9ICooY29uc3QgaW50KilhOwogIGludCBhcmcyID0gKihjb25zdCBpbnQqKWI7CiAgaWYoYXJnMSA8IGFyZzIpIHJldHVybiAtMTsKICBpZihhcmcxID4gYXJnMikgcmV0dXJuIDE7CiAgcmV0dXJuIDA7Cn0KCmludCBjb21wYXJlX3N0cmluZ3MoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikgIAp7CiAgcmV0dXJuIHN0cmNtcCgqKChjaGFyKiopIGEpLCAqKChjaGFyKiopIGIpKTsKfQogCmludCBtYWluKCkKewogIGludCBmb29bXSA9IHs3NSwgNzIsIDk4LCAtODQsIDYzfTsKICBjb25zdCBjaGFyICpiYXJbXSA9IHsiQmxhaCIsICJCbHVwcCIsICJBYWNoZW4iLCAiWmVwcGVsaW4iLCAiRm9vYmFyIn07CgogIHByaW50ZigiSW50ZWdlcm1pbmltdW0gaXN0OiAlZFxuIiwgKihpbnQqKSBtaW5fZWxlbWVudChmb28sIHNpemVvZihmb28pL3NpemVvZigqZm9vKSwgc2l6ZW9mKCpmb28pLCBjb21wYXJlX2ludHMpKTsKICBwcmludGYoIlN0cmluZ21pbmltdW0gaXN0OiAlc1xuIiwgKihjb25zdCBjaGFyKiopIG1pbl9lbGVtZW50KGJhciwgc2l6ZW9mKGJhcikvc2l6ZW9mKCpiYXIpLCBzaXplb2YoKmJhciksIGNvbXBhcmVfc3RyaW5ncykpOwogIHJldHVybiAwOwp9Cg==