设a[0:n-1]是已排好序的数组.请改写二分搜索算法,使得当被搜索元素x不在数组中时,返回小于x的最大元素...

设a[0:n-1]是已排好序的数组.请改写二分搜索算法,使得当被搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置.
⊥221[2/3]iddle-1和middle+1的元素区间中.所以只要每次二分时预存储这两个值就可以了.不知道对不对?? pedoc: 9077732

小于x的最大元素在x的左边(x不存在时),大于x的最小元素在x的右边(x不存在时);所以比较到最后,如果找到x,则输出x的位置,没找到x时,返回最后的位置的左和右位置。如题的代码如下:

include <stdio.h>
int main(){
int ip[100],n,key,i,mid,lt=0,rt,fg=0;
printf("请输入数组长度:");
scanf;
printf("请输入已排序的数组:");
for(i=0;i<n;i++)
scanf("%d",ip+i);
printf("请输入待查找数:");

扩展资料:

二分法算法

当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,如果当前位置arr[k]值等于key,则查找成功;

若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],直到找到为止,时间复杂度为O(log(n))。




温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-26
能写的太少详见我博客,我发在那里了
你说的有点小问题,是用low high求结果的
且每个函数只能返回一个值

小于x的最大索引
return high;
大于x的最小索引
return low != array.length ? low : low + 1;

参考资料:http://hi.baidu.com/dyevis/blog

本回答被提问者采纳

设a[0:n-1]是已排好序的数组.请改写二分搜索算法,使得当被搜索元素x...
include <stdio.h>int main(){int ip[100],n,key,i,mid,lt=0,rt,fg=0;printf("请输入数组长度:");scanf;printf("请输入已排序的数组:");for(i=0;i<n;i++)scanf("%d",ip+i);printf("请输入待查找数:");

设a【0,n-1】是一个已排好序的数组,请改写二分搜索算法
设a【0,n-1】是一个已排好序的数组,请改写二分搜索算法 15 使得当搜索元素X不在数组中时,返回小于x的最大元素的位置i和大于x的最大元素位置J。当搜索元素在数组中时,i,j相同,均为x在数组中位置。用分治法... 使得当搜索元素X不在数组中时,返回小于x的最大元素的位置i和大于x的最大元素位置J。当...

冒泡排序法和快速排序比较的算法
如果函数的调用形式是quicksort(0, n-1),那么这段代码将对一个全局数组x[n]进行排序。函数的两个参数分别是将要进行排序的子数组的下标:l是较低的下标,而u是较高的下标。函数调用swap(i,j)将会交换x[i]与x[j]这两个元素。第一次交换操作将会按照均匀分布的方式在l和u之间随机地选择一个划分元素。在《P...

Task 04:数组二分查找
0704 二分查找 *:给定一个升序的数组nums和一个目标值target,返回target在数组中的位置,如果找不到,则返回-1。 样例1:输入为nums=[-1, 0, 3, 5, 9, 12],target=9,输出为4; 样例2:输入为nums=[-1, 0, 3, 5, 9, 12],target=2,输出为-1。 思路1:直接法。一旦在循环体中找到该需查找的元...

Binary Search(二分搜索)
其核心步骤如下:初始化左边界L为0,右边界R为数组长度减一,取中间值m,比较Am与T,然后递归调整L和R。这个过程的平均时间复杂度是惊人的O(log_2 n),即使在多数组分散层叠优化下,也能达到O(k+log n)的效率,空间复杂度仅为O(1),这使得二分搜索在查找问题中独步天下。在特定场景中,二分...

二分查找是一个有效计算平方根的方法
二分查找是一种计算工具,即在有序列表或数组中查找特定元素的算法。在计算平方根时,我们可以使用二分查找方法来逼近它的精确值。利用二分查找方法,当我们要计算一个数x的平方根时,我们应首先确定该平方根的可能范围。例如,如果x大于1,则其平方根肯定小于x\/2。因此,我们可以将搜索范围设置为(0...

二分搜索法简介
二分搜索法,一种基于分治策略的高效搜索算法,它在元素有序的情况下,能在最坏情况下以O(log n)的时间复杂度完成搜索任务。其核心思想是将数据分为两部分,每次比较中间元素,根据与目标值的大小关系缩小搜索范围。如果目标值等于中间元素,搜索结束;否则,根据大小关系,继续在左半部分或右半部分进行...

在有序表a[1…20]中,按二分查找方法进行查找,查找长度为4的元素的下...
在有序表a[1…20]中,按二分查找方法进行查找,查找长度为4的元素的下标从小到大依次是10,5,3,4。二分查找是将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表...

二分查找要求所查找的内容必须
二分查找的基本思想是将n个元素分成大致相等的两部分,取a与x做比较,如果x=a,则找到x,算法中止;如果x<a,则只要在数组a的左半部分继续搜索x,如果x>a,则只要在数组a的右半部搜索x,时间复杂度即是while循环的次数。总共有n个元素,渐渐跟下去就是n,n/2,n/4,n/2^k(接下来操作...

什么叫快速排序
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;2)以第一个数组元素作为...

相似回答