OLD | NEW |
1 #include <stdlib.h> | 1 #include <stdlib.h> |
2 | 2 |
3 void *bsearch(const void *key, const void *base, size_t nel, size_t width, int (
*cmp)(const void *, const void *)) | 3 void* bsearch(const void* key, |
4 { | 4 const void* base, |
5 » void *try; | 5 size_t nel, |
6 » int sign; | 6 size_t width, |
7 » while (nel > 0) { | 7 int (*cmp)(const void*, const void*)) { |
8 » » try = (char *)base + width*(nel/2); | 8 void* try |
9 » » sign = cmp(key, try); | 9 ; |
10 » » if (!sign) return try; | 10 int sign; |
11 » » else if (nel == 1) break; | 11 while (nel > 0) { |
12 » » else if (sign < 0) | 12 try |
13 » » » nel /= 2; | 13 = (char*)base + width * (nel / 2); |
14 » » else { | 14 sign = cmp(key, try); |
15 » » » base = try; | 15 if (!sign) |
16 » » » nel -= nel/2; | 16 return try |
17 » » } | 17 ; |
18 » } | 18 else if (nel == 1) |
19 » return NULL; | 19 break; |
| 20 else if (sign < 0) |
| 21 nel /= 2; |
| 22 else { |
| 23 base = try |
| 24 ; |
| 25 nel -= nel / 2; |
| 26 } |
| 27 } |
| 28 return NULL; |
20 } | 29 } |
OLD | NEW |