标签:之间 最小 一个 循环 结果 search 最大数 相同 元素
内容目录:
一、实践题目
设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
二、问题描述
1. 使用二分搜索算法;
2. 在经典二分搜索算法的基础上进行改写,搜索方式不改变的情况下输出想要的结果(经典二分搜索方式的思路再此题中依然适用,需要改写输出的部分)。
三、算法描述
1. 代码:
2. 相关实现描述:
使用二分搜索函数int BinarySearch(int a[], int x, int n)来实现二分搜索的功能,里面将会出现四种情况:
(1). x == a[mid],即输入要查找的数字在数组中正好存在,此时将会输出两次要查找的数字在数组中的对应下标;
(2). 要查找的x并不在数组里面,此时不断地查找,指针不断移动,最后的停留会出现三种情况:停留在恰好比x大和比x小的两个数字之间、停留最小数字的左边、停留在最大数字的右边。相对应的输出结果有三种:输出小于x的最大元素的最大下标和大于x的最小元素的最小下标、输出:-1 0 、输出:n-1的值 n的值,
四、算法的时间复杂度和空间复杂度分析
由此容易看出,每执行一次算法的while循环,待搜索的数组大小减小一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)。空间复杂度同样为O(logn)。
五、心得体会
经过此次上机实践后,感受到了算法其实并不是想象中的困难,但也不是完全没有难度。所有复杂的算法都是由简单的算法为基础,进行改写或是组合,由此来达到自己想实现的功能。同时,还想要说,有一些问题并没有想象中的复杂,有些时候,可能只是需要改动一个小小的地方就可以达到想要的效果。
标签:之间 最小 一个 循环 结果 search 最大数 相同 元素
原文地址:https://www.cnblogs.com/jumaodangdawang/p/11565582.html