//顺序查找
int seq_search(int* arrays, int len,int val)
{
if (NULL == arrays || len < 2)
return 0;
for (int i=0;i<len;i++)
{
if (val == arrays[i])
return i;
}
return -1;
}
//二值查找
int binary_search(int* arrays, int len, int val)
{
if (NULL == arrays || len < 2)
return 0;
int left = 0;
int right = len - 1;
while (left<=right)
{
int mid = (left + right) / 2;
if (arrays[mid] == val)
return mid;
if (arrays[mid] > val)
{
right = mid - 1;
}
if (arrays[mid] < val)
left = mid + 1;
}
return -1;
}
//插入查找
int insert_search(int* arrays, int left,int right, int val)
{
if (NULL == arrays || left > right)
return -1;
int mid = left + (val - arrays[left]) / (arrays[right] - arrays[left]) * (right - left);
if (arrays[mid] == val)
return mid;
if (arrays[mid] > val)
return insert_search(arrays, left, mid - 1, val);
if (arrays[mid] < val)
return insert_search(arrays, mid + 1, right, val);
}
//斐波那契数列查找
void Fibonacci(int *F,int max_len)
{
if (NULL == F || max_len < 2)
return ;
F[0] = 0;
F[1] = 1;
for (int i=2;i<max_len;i++)
{
F[i] = F[i - 1] + F[i - 2];
}
return;
}
int Fibonacci_search(int* arrays, int len, int val)
{
int low = 0;
int high = len - 1;
int Fibo[20];
Fibonacci(Fibo, 20);
int k = 0;
while (len > Fibo[k] - 1)
++k;
int* tmp_vals = new int[Fibo[k] - 1];
for (int i=0;i<Fibo[k]-1;i++)
{
if (i < len)
tmp_vals[i] = arrays[i];
else
tmp_vals[i] = arrays[len - 1];
}
while (low <= high)
{
int mid = low + Fibo[k - 1] - 1;
if (val < tmp_vals[mid])
{
high = mid - 1;
k = k - 1;
}
else if (tmp_vals[mid] < val)
{
low = mid + 1;
k = k - 2;
}
else
{
if (mid < len)
return mid;
else
return len - 1;
}
}
delete[]tmp_vals;
return -1;
}
数据结构经典搜索算法
最新推荐文章于 2022-04-19 17:24:08 发布