折半查找

一、概念
     折半查找(Binary Search)的查找过程是:先确定待查找记录所在的范围区间,然后逐步 缩小范围直到找到或找不到记录为止。该方法的局限性在于要排序的查找表必须有序,即
     如若i<j 那么a(i)<=a(j);
二、C语言编程实现
      //
//  main.c
//  BinarySearchDemo
//
//  Created by zhanggui on 15/7/19.
//  Copyright (c) 2015年 zhanggui. All rights reserved.
//

#include <stdio.h>
#include <time.h>
#define N 20
int BinarySearch(int a[], int n,int found)
{
    int low = 0;
    int high = n-1;
    int mid;
//    time_t startTime,endTime;   //用于计算运行时间
//    startTime = clock();
    while (low <= high) {
        mid = (low+high)/2;
        if (found==a[mid]) {
            printf("-------------------
");
//            endTime = clock();
//            double Total_Waste_Time = (double)(endTime-startTime)/CLOCKS_PER_SEC;
//            printf("花费时间为:%f",Total_Waste_Time);
            return mid;
        }else if (found<a[mid])
        {
            high = mid - 1;
        }else {
            low = mid+1;
        }
    }
//    endTime = clock();
//    double Total_Waste_Time = (double)(endTime-startTime)/CLOCKS_PER_SEC;
//    printf("花费时间为:%f",Total_Waste_Time);
    return -1;
   
}

int main(int argc, const char * argv[]) {
    int found;
    int a[N] = {3,4,5,6,7,8,9,10,14,15,18,20,31,43,56,67,84,90,92,96};
    printf("请输入一个数:");
    scanf("%d",&found);
    int i = BinarySearch(a, N, found);
    if (i != -1) {
        printf("在数组中的位置是%d
",i);
    }else
    {
        printf("没有找到");
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/zhanggui/p/4658393.html