#include <stdio.h>
#include <stdbool.h>
#define K 4
#define n 16
bool search(int *t, int size, int val)
{
int nb_element_per_stage;
if (val < t[0] || val > t[size - 1])
{
return false;
}
int inf = 0;
int sup = size - 1;
if (sup - inf + 1 > K)
{
nb_element_per_stage = (sup - inf + 1) / K;
sup = (sup - inf + 1) / K - 1;
while (inf < sup - inf + 1)
{
if (val >= t[inf] && val <= t[sup])
{
return search(t, sup - inf + 1, val);
}
else
{
inf = sup + 1;
sup = sup + nb_element_per_stage;
}
}
if (inf == sup - inf + 1)
return false;
else
{
int i = 0;
for (i = 0; i < sup - inf + 1; i++)
{
if (val == t[i])
{
return true;
}
}
return false;
}
}
问题在于t[inf]
和t[sup]
始终指向较大数组的sup
和inf
的前两个值。
如何正确传递新大小的数组?旧版本的t[0]
也是新版本的t[0]
吗?