排序数组中的下一个更高的数字

时间:2011-02-16 05:59:15

标签: c

我有一个排序数组(按升序排列),我想找到下标  数组中的数字,是给定的下一个最高数字  数。例如,如果我有67作为给定的数字,如果我有一个数组  x =(23,36,45,62,79,103,109),那么如何从x得到下标5(到  在不使用for循环的情况下获得79,这是67的下一个最高?

5 个答案:

答案 0 :(得分:3)

这是家庭作业吗?

您可以通过递归调用轻松完成,每次将数组拆分为一半。

答案 1 :(得分:1)

您必须使用二进制搜索。见维基百科。 http://en.wikipedia.org/wiki/Binary_search

同样在C中,您可以使用内置库函数bsearch进行二进制搜索。 http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/

答案 2 :(得分:0)

以下代码将查找数组中下一个最高数字的索引。但是......

#include <stdio.h>

int findIndex(int *array, int value) {
    static int index = 0;
    index++;
    if(array[index] > value)
        printf("Index: %d\n", index);
    else
        return findIndex(array, value);
} // findIndex

int main() {
    int x[] = {23, 36, 45, 62, 79, 103, 109};

    findIndex(x, 67);

    return 0;
}

此代码存在缺陷。你注意到了吗?

答案 3 :(得分:0)

a:数组。 低:起始指数。 高:最大指数。 number:要搜索的号码。

** int下标(int a [],int low,int high,int number)

{

int mid;

if (number > a[low] && number < a[high])
{

    mid = (low+high)/2;

if a[mid] > number 
        {
             if ( a[mid-1]<=number)
           return mid;
            else return subscript(a, low, mid-1); 
      }

if a[mid]<=number 
         {
             if( a[mid+1] > number)
              return mid+1;
             else
              return subscript(a, mid+1, high);
        }
}

返回-1; 的}

答案 4 :(得分:0)

我测试了这个:

〜&GT; a.out的 ARR = 23 36 45 62 79 103 109 值:79,指数:4

此代码中没有边界检查...

#include <stdio.h>

int findNum(int, int *, int *); 

int main(int argc, char** argv) {
  int list[7] = {23,36,45,62,79,103,109};
  int i, val, idx = 0;

  printf("ARR=");
  for (i=0; i<7; i++) {
    printf("%d ", list[i]);
  }

  val = findNum(67, list, &idx);
  printf("\nvalue: %d, index: %d\n\n", val, idx);

  return(0);
}

int findNum(int num, int *list, int *idx) {

  if (*list <= num) {
    *idx = (*idx)++;
    return(findNum(num,list+1,idx));
  }

}