二分法查找

算法:二分法查找

时光毁灭记忆、已成空白 提交于 2019-11-29 05:10:40
package com.atguigu;public class Main { public static void main(String[] args) { //二分法查找 //前提:所查找的数组必须有序 int[] arr=new int[]{-98,-34,2,34,54,66,79,105,210,333}; int dest=-3; int head=0;//初始的首索引 int end=arr.length-1; boolean isFlag=true; while(head<=end){ int middle=(head+end)/2; if(dest==arr[middle]){ System.out.println("找到指定的元素,位置为"+middle); isFlag=false; break; }else if(arr[middle]>dest){ end=middle-1; }else{ head=middle+1; } } if(isFlag){ System.out.println("很遗憾,没有找到"); } }} 来源: https://www.cnblogs.com/helloworld0903/p/11456552.html

C++二分法查找算法

人走茶凉 提交于 2019-11-27 14:33:43
/************************************************************** * 二分法查找算法 * wxz 2011-05-04 ***************************************************************/ #include<iostream> #define MaxSize 100 using namespace std; typedef int DataType; typedef struct ST { DataType Data[MaxSize]; int Length; }ST; void CreateST(ST *st) { int i; cout<<"请输入要建立的顺序表的长度"<<"("<<MaxSize<<"以内)"<<endl; cin>>st->Length; while(st->Length>100) { cout<<"长度不能大于"<<MaxSize<<endl; cout<<"请输入要建立的顺序表的长度"<<"("<<MaxSize<<"以内)"<<endl; cin>>st->Length; } cout<<"请输入"<<st->Length<<"个整数:"<<endl; for(i=0;i<=st->Length-1;i++) cin>>st-

二分法查找

五迷三道 提交于 2019-11-27 00:24:50
二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 递归实现 def binary_search ( alist , item ) : if len ( alist ) == 0 : return False else : midpoint = len ( alist ) // 2 if alist [ midpoint ] == item : return True else : if item < alist [ midpoint ] : return binary_search ( alist [ : midpoint ] , item ) else : return binary_search ( alist [ midpoint + 1 : ] , item ) testlist = [ 0 , 1 , 2 , 8 , 13 , 17 ,