/c++实现/
#include <iostream> using namespace std; /* *二分查找思想:1、数组从小到大排序;2、查找的key每次和中间数比较,如果key小于mid 查找mid左侧的数组部分;如果key大于mid,则查找mid右侧的数组部分;如果相等,则直接返回mid。 输入:排序数组-array,数组大小-aSize,查找值-key 返回:返回数组中的相应位置,否则返回-1 */ //非递归查找 int BinarySearch(int *array, int aSize, int key) { if ( array == NULL || aSize == 0 ) return -1; int low = 0; int high = aSize - 1; int mid = 0; while ( low <= high ) { mid = (low + high )/2; cout<<"BinarySearch"<<mid<<endl; if ( array[mid] < key) low = mid + 1; else if ( array[mid] > key ) high = mid - 1; else return mid; } return -1; } //递归 int BinarySearchRecursive(int *array, int low, int high, int key) { if ( low > high ) return -1; int mid = ( low + high )/2; cout<<"BinarySearchRecursive"<<mid<<endl; if ( array[mid] == key ) return mid; else if ( array[mid] < key ) return BinarySearchRecursive(array, mid+1, high, key); else return BinarySearchRecursive(array, low, mid-1, key); } int main() { int array[11]={2,24,50,100,123,213,300,500,730,800,950}; // for (int i=0; i<10; i++) // array[i] += i; cout<<"No recursive:"<<endl; cout<<"position:"<<BinarySearch(array, 11, 123)<<endl; cout<<"recursive:"<<endl; cout<<"position:"<<BinarySearchRecursive(array, 0, 10, 123)<<endl; return 0; }
///python实现/
def BinarySearch( lea,key): if lea==None or len(lea)==0: return -1 low =0 high=len(lea)-1 while low <= high: mid = int((high+low)/2) print ("BinarySearch:%d" %mid) if lea[mid] <key: low =mid +1 elif lea[mid]>key: high =mid -1 else: return mid return -1 if __name__=='__main__': mylea = [10,11,20,34,57,59,422,700,984,10123] a = BinarySearch(mylea,422) print (a)
///java实现/
package javaapplication2; /** * * @author allenboy */ public class testjava { public static int sreak(int[] arr,int key){ if(arr.length==0||arr==null){ return -1; } int low =0; int hight = arr.length-1; while(low<=hight){ int mid = (low + hight)>>1; int num = arr[mid]; if(key==num){ return mid; }if(key>num){ low=mid+1; } else{ hight=mid-1; } } return -1; } public static void main(String[] args) { int[] myarr = new int[]{1,3,5,6,7,8,10}; int num = sreak(myarr,7); System.out.println(num); } }
/oc 实现/
#import <Foundation/Foundation.h> @interface search : NSObject +(int)BinarySearch:(NSArray*)arr target:(int)target; @end
// // search.m // allen // // Created by Allenboy on 2018/1/16. // Copyright © 2018年 Allenboy. All rights reserved. // #import "search.h" @implementation search +(int)BinarySearch:(NSArray *)arr target:(int)target { if (!arr.count) { return -1; } unsigned int low = 0; unsigned int high = arr.count - 1; while (low<=high) { unsigned int mid = low + ((high-low)>>1); //防止加法溢出 int num =(int)[arr objectAtIndex:mid]; if (target == num) { return mid; }else if(num > target) { high = mid -1; }else{ low = mid +1; } } return -1; } @end
// // main.m // allen // // Created by Allenboy on 2018/1/15. // Copyright © 2018年 Allenboy. All rights reserved. // // #import <Foundation/Foundation.h> #import "search.h" int main(int argc, const char * argv[]) { @autoreleasepool { // search* se =[[search alloc] init]; NSArray *arr = @[@1,@4,@5,@8,@12,@32,@45]; int result = [search BinarySearch:arr target:@4]; NSLog(@"%d",result); } return 0; }
二分查找
最新推荐文章于 2022-11-22 16:30:06 发布