二分查找

折半查找,又叫二分查找

要求顺序存储结构且要求元素按关键字有序排列

时间复杂度O(log2n)

成功的情况下:查找过程走了一条从判定树的根到被查记录的路径,比较的次数恰为记录在树中的层数。

失败的情况下:查找过程经过了从判定树的根到某个外部节点的路径,所需比较次数不超过判定树的高度。

过程描述:

首先,用要查找的关键字k与中间位置的节点的关键字相比较,这个中间记录将这个表分为了两个子表,若比较结果相等则查找成功;

        如果比较结果不成功,就根据k与该中间记录比较大小确认下一步查找那个子表,这样递归下去。

判定树:又称比较树,如果将折半查找的过程用二叉树来表示,把当前查找区中间位置上的数据作为根,左子表和右子表分别作为根的左子树和右子树,由此得到的树叫做判定树

/**
 * 二分查找
 * 不断将数组进行对半分割,比较中间值与key,直到找到关键字或者数组只有1个元素并比较
 * @param num
 * @param len
 * @param key
 */
void binarySearch(int num[],int len,int key)
{
    int index1 = 0,index2 = len-1;
    while(index1<=index2)
    {
        if(key==num[(index1+index2)/2])
        {
            cout<<"find"<


你可能感兴趣的:(基础算法)