当数组的元素过多时,时间复杂度为O(n),于是我们引入了从中间开始,动态判断元素的方法——二分查找,其时间复杂度为O(log n)
算法实现逻辑:
设立left mid right 三个指针,分别指向数组的前 中 后三个位置的元素
当所求元素大于mid所指元素时,left=mid+1;mid=left+right/2;
当所求元素小于mid所指元素时,right=mid-1;mid=left+right/2;
当所求元素等于mid所求元素时,返回mid,即可找到所求元素在数组中的位置。
若所求元素不在数组中,则会出现left<right的情况。
int BinarySearch(int* arr,int k)
{
int left, right, mid;
left = 1, right = arr[0];
mid = (left + right) / 2;
while (left<=right)
{
if (arr[mid] < k)
{
left = mid + 1;
mid = (left + right )/ 2;
}
else if (arr[mid] > k)
{
right = mid - 1;
mid = (left + right) / 2;
}
else
{
return mid;
}}
return -1;
}
这种二分查找的结构用图像表示出来就是二叉树的结构
而当我们在这些元素节点上添加或删除元素时,数组的结构不方便我们操作
因此引入了 树 这一数据结构