zoukankan      html  css  js  c++  java
  • C++Builder实现二分查找法

    最近写代码,感觉算法能力比较弱,想想上大学时,特别喜欢数据结构这门课,如今都忘光了,现在想重新复习一下,为以后写代码扩展下思路。

    一、二分法思想

    要求:查询数组中某个数据所在的位置。

    前提:所查询的数据是有序的(我们假设从小到大排序)

    思路:

    1.找到数组中间a[middle]的值,和要查找的值value进行比较;

    2.如果a[middle]>value,在数组前半部分查找,返回步骤1

    3.如果a[middle]<value,在数组后半部分查找,返回步骤1

    4.如果a[middle]=value,返回middle值

    二、C++builder代码实现

    1、实现函数

     1 int __fastcall TForm1::findValueInArray(int a[],int min,int max,int value)
     2 {
     3     
     4     if( a[min]>value || a[max]<value)
     5     {
     6         return -1;
     7     }
     8     int index = (max+min)/2;
     9     if( value>a[index] )
    10     {
    11         return findValueInArray(a,index+1,max,value);
    12     }
    13     else if( value<a[index] )
    14     {
    15         return findValueInArray(a,min,index-1,value);        
    16     }
    17     else 
    18     {
    19         return index;    
    20     }
    21 } 

    2.测试代码

     1 void __fastcall TForm1::btn1Click(TObject *Sender)
     2 {
     3     int a[15]={1,2,4,8,12,14,16,32,34,46,56,67,68,87,89};
     4     int value = StrToInt(edt1->Text.Trim());
     5     int index = findValueInArray(a,0,14,value); 
     6     if(index == -1)
     7     {
     8         ShowMessage("数组中无此数据!");
     9     }
    10     else
    11     {
    12         ShowMessage("数组的index为:"+IntToStr(index));        
    13     }   
    14 }

    网上查了下资料,有用java实现的另一种思路,参考看看传送门

  • 相关阅读:
    (五)CSS和JavaScript基础
    (四)标签框架
    (三)表单与servlet的初步结合
    (三)文档结构(上)
    (二十一)持有对象以及泛型基础(1)
    (二十)内部类详解(转)
    (十九)接口类型的简介
    nginx配置文件
    nginx负载均衡
    debian iptables持久化
  • 原文地址:https://www.cnblogs.com/victoria-c/p/6297190.html
Copyright © 2011-2022 走看看