c语言的一个问题

  1. 设计并编写一个C语言函数unsigned char isldentical(int a[],unsigned int n),判断给定的长度为n的元素各不相同且已按升序排序的数组a中是否存在一个元素等于其索引值,即a[i]=i,如果存在返回1,否则返回0。要求算法的时间复杂度为O(log n)。
阅读 3.9k
3 个回答

正如楼上说的
伪代码如下,
isldentical 用去掉另外一个函数,占且定为isldenticalfun,需要知道开始,结束为位置

isldenticalfun(a[],0,n):

    if a[n/2]>n/2://说明在你只可能去左边找了
        return isldenticalfun(a,0,n/2 -1)
    elseif a[n/2] < n/2 ://说明你只可能在右边找了
        return isldenticalfun(a,n/2+1,n)
    else://说明找到了
        return n/2

二分法好像可以搞定

二分法搞定,使用循环的方式,最好不要像1楼采用递归。
因为n值未定上限,递归次数过多的话,搞不好会写穿调用栈。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进