首页 > 学院 > 开发设计 > 正文

二分法查找有序数组元素

2019-11-09 17:47:23
字体:
来源:转载
供稿:网友

在一个有序数组中,如果我们想要找到指定的元素是否存在。我们怎么去查找呢?如果是非计算机专业人员可能会写一个for循环,挨个进行比较。可是这样进行比较的话是最笨的办法。我们写了这么多年程序了,不能这样做对不对?这样怎么能够体现出我们的水平呢? 我们可以使用二分法,这样可以加快寻找的效率。现在我讲讲二分法的思路: 它是通过与数组的中间值进行比较的,步骤如下: **注释: 下边的解释假设: 1.我们要查找的值为X 2.数组是从小到大排序的 ** 1.先取出数组中间的元素 2.把中间元素和X进行比较,如果中间元素大于X,那么X就位于第一个元素,和中间元素之间。反之,如果中间元素小于X,那么X就位于中间元素和最大值之间。 3.这样进行比较之后,我们的查找范围就小了一半。 下边我献上代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.

NSArray *arr = @[@1,@20,@30,@45,@50,@55,@60,@66,@70];NSInteger x = 70,min,max,mid;min = 0;max = arr.count - 1;mid = (min + max) / 2;for (int i = 0; i < arr.count; i++){ if ([arr[mid] integerValue] == x) { NSLog(@"查找次数为%d次",i); NSLog(@"寻找值位置为%ld",mid); return; }else if ([arr[mid] integerValue] > x) { max = mid - 1; mid = (min + max) / 2; }else if ([arr[mid] integerValue] < x) { min = mid + 1; mid = (min + max) / 2; }}

}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表