本文主要是介绍Linux C/C++编程一站式学习中折半查找(如果待查找的元素在数组中有多个则返回第一个),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Linux C/C++编程一站式学习中折半查找(如果待查找的元素在数组中有多个则返回第一个)
折半查找
本节的折半查找算法有一个特点:如果待查找的元素在数组中有多个则返回其中任意一个,以本节定义的数组 int a[8] = { 1, 2, 2, 2, 5, 6, 8, 9 }; 为例,如果调用 binarysearch(2) 则返回3,即 a[3] ,而有些场合下要求这样的查找返回 a[1] (如果待查找的元素在数组中有多个则返回第一个)。请修改折半查找算法实现这一特性。
代码
#include <stdio.h>#define LEN 8
int a[LEN] = { 1, 2, 2, 5, 5, 6, 8, 9 };int binarysearch(int number)
{int mid,start = 0,end = LEN - 1;while(start <= end){mid = (start + end) / 2;
// printf("%d\n", mid);if(a[mid] < number)start = mid + 1;else if(a[mid] > number)end = mid - 1;else //printf("%d\n", mid);for(int j=mid-1;j >= 0;j--)if(a[j] == a[mid])mid = j;return mid;}return -1;}int main(void)
{printf("%d\n", binarysearch(5));return 0;
}
这篇关于Linux C/C++编程一站式学习中折半查找(如果待查找的元素在数组中有多个则返回第一个)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!