通过二分查找方法为什么不能找到以十六进制表示的数

通过二分查找方法为什么不能找到以十六进制表示的数


#include <stdio.h>
int a[] = {27, 36, 38, 44, 2, 3, 4, 5, 15, 19, 16, 46, 47, 48, 52};
unsigned int sub1[] = {0x7e, 0x7d, 0x7b, 0x77, 0x6f, 0x5f, 0x3f0xef};

int BinarySearch1(unsigned int a[], int value, int n)
{
  int low, high, mid;
  low = 0;
  high = n - 1;
  while (low <= high)
  {
    mid = (low + high) / 2;
    if (a[mid] == value)
      return mid;
    if (a[mid] > value)
      high = mid - 1;
    if (a[mid] < value)
      low = mid + 1;
    }
  return -1;
}

int main()
{
  int c = 0x6f;
  int num = BinarySearch1(sub1, c, 8);
  printf("num= %d \t", num);
  return 1;
}

如果是是查找0xef又可以找到,不知道为什么有些可以找到有些十六进制表示的数又找不到。

二分查找的前提是个有序表,你的sub1根本不是有序表,看你的算法要按升序排列。你把Sub1排序后就能查到了。