(学习3)二分法与二叉查找树

二分查找法:对一个有序序列进行一分为二的检索,每次查找范围缩小一半,直到找到所需的数或者查找范围不存在;

问题描述:对一个有序序列检索一个输入的数,若该数存在则返回下标,否则返回1;

问题分析:这种问题最简单的方法是顺序检索,在数据量小的情况下,顺序和二分还有二叉查找树没有很大差别(此时是单边树),但在数据量大的情况下,对有序表的检索二分较优。

这里用二叉查找树只是因为想复习一下数据结构学过的知识。

时间复杂度:log(n)

算法设计:

//
//  binary_search.cpp
//
//
//  Created by yizhihenpidehou on 2020/3/10.
//

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxen=500;
int binary_search(int *num,int search_num,int len){ //二分查找法
    int left=1;
    int right=len;
    int mid;
    while(left<=right){
        mid=(left+right)/2;
        if(num[mid]==search_num){
            return mid;
        }
        else if(num[mid]<search_num){
            left=mid+1;
        }
        else{
            right=mid-1;
        }
    }
    return 0;
}
int main(){
    int n;//输入数的数量
    scanf("%d",&n);
    int j=0;
    int num[maxen];
    for(int i=1;i<=n;i++){
        scanf("%d",&num[i]);
    }
    int search_num;
    scanf("%d",&search_num);
    j=binary_search(num,search_num,n);
    printf("%d
",j);
    return 0;
}

2:二叉查找树(BST)

算法时间复杂度:在单支树的情况下是O(n),在分布均匀的情况下是O(logn)

算法设计

//
//  binary_search.cpp
//  
//
//  Created by yizhihenpidehou on 2020/3/10.
//

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxen=500;
int binary_search(int *num,int search_num,int len){
    int left=1;
    int right=len;
    int mid;
    while(left<=right){
        mid=(left+right)/2;
        if(num[mid]==search_num){
            return mid;
        }
        else if(num[mid]<search_num){
            left=mid+1;
        }
        else{
            right=mid-1;
        }
    }
    return j;
}
int main(){
    int n;//输入数的数量
    scanf("%d",&n);
    int j=0;
    for(int i=1;i<=n;i++){
        scanf("%d",&num[i]);
    }
    int search_num;
    scanf("%d",&search_num);
    j=binary_search(num,search_num,n);
    printf("%d
",j);
    return 0;
}

github:https://github.com/yizhihenpidehou/bananas/tree/master/%E7%AC%AC%E4%B8%89%E5%91%A8 

原文地址:https://www.cnblogs.com/pipihoudewo/p/12496095.html