zoukankan      html  css  js  c++  java
  • 折半查找

    一、概念
         折半查找(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;
    }
    

      

  • 相关阅读:
    printf,sprintf,fprintf的区别与联系
    linux repo init 遇到的问题
    POSTMAN使用说明
    HTTP协议-深入了解
    HTTP协议-详解篇
    HTTP协议-基础篇
    多线程学习
    I/O流
    String类学习&泛型
    集合
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4658393.html
Copyright © 2011-2022 走看看