数据结构之二分查找算法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

代码如下:

/** 二分查找算法 **/
#include<stdio.h>
#define LENGTH 10

int binarySearch(int arr[],int key){
    int low=0;
    int high=LENGTH-1;
    int mid;
    while(low <= high){
        mid = (low+high)/2;
        if(key < arr[mid]){
            high = mid-1;
        }else if(key>arr[mid]){
            low = mid+1;
        }else{
            return mid;
        }
    }
    return -1;
}

int main(){
    int arr[LENGTH] = {5,13,19,21,37,56,64,75,80,92};
    int key = 56;
    int index = binarySearch(arr,key);

    if(index == -1){
        printf("key=%d没有查找到\n",key);
    }else{
        printf("key=%d所在的数组下标值为%d\n",key,index);
    }

    return 0;
}

 

运行结果截图:

 

posted @ 2016-04-15 17:13  水火379  阅读(180)  评论(0编辑  收藏  举报