第二章实践

1、 实践题目

改写二分搜索算法(第二题)

2、 问题描述

设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。

3、 算法描述

先按照要求创建一个数组,再输入数值。接着构造二分搜索的函数,用i 和 j 代表指向位置旁边的两个数组地址值,以left《= right 为条件,分三种情况:循环后找到、循环后比middle 小、循环后比middle大。最后做出最后种情况,即查找不到,返回两边数组的地址值。

4、 算法时间及空间复杂度分析

时间:以最坏情况考虑,二分查找第一次在n/2中查找(n为元素个数);第二次在一半的 一半中查找,即n/2/2=n/4;……第x次在n/2^x范围内查找,即2^x=n(x=log2^n),所以时间复杂度为O(log2^n)。

空间:这个是非递归情况,在这个过程中,辅助空间为常数级别,所以空间复杂度为O(1)。

5、 心得体会

(1)相比于第一题,这题就多了一个返回两边地址值的条件。做题要先看清问题,做起来就轻松一点。

(2)看到题目又i 和j就用了,实际上是不用这么麻烦的,直接返回left 和 right 就可以了。

猜你喜欢

转载自www.cnblogs.com/ReJay/p/9788751.html