二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn) 。
废话不多说:直接objective-c 代码
//
// NGBinary.m
// MyLearn
// ---二分算法---
// 程序员十大必备算法
// Created by 金灵波on 14-6-19.
// Copyright (c) 2014年 金灵波 All rights reserved.
//
#import "NGBinary.h"
#define MIDINDEX(start,end) ((start)+(end))/2
@implementation NGBinary
const int Max=100000;//常量
static int searchTime=0;//全局变量 ,记录递归查找次数
+(void)Run{
int array[Max]={0};
for (int i=0; i<Max;++i) {
array[i]= i+1;
}
searchTime=0;
int resultIndex= [NGBinary BinarySearchWithArray:array StartIndex:0 EndIndex:(Max-1) WithSearchNumber:40026];
NSLog(@"searchTime:%d;resultIndex:%d",searchTime,resultIndex);
}
+(int) BinarySearchWithArray:(int *)array StartIndex:(int)start EndIndex:(int)end WithSearchNumber:(int) number
{
++searchTime;
if (start>=end||number>array[end]||number<array[start]) {
return -1;
}
if(number==array[start])return start;
if(number==array[end])return end;
//获取中间索引
int mid=MIDINDEX(start,end);
if (number==array[mid]) {
return mid;
}else if(number<array[mid])
{
return [NGBinary BinarySearchWithArray:array StartIndex:start+1 EndIndex:mid-1 WithSearchNumber:number];
}else
{
return [NGBinary BinarySearchWithArray:array StartIndex:mid+1 EndIndex:end-1 WithSearchNumber:number];
}
}
@end
浙公网安备 33010602011771号