在 C 程序中不使用浮点算法对有理数进行二分查找

cserver side programmingprogramming

在这个问题中,我们得到了一个有理数排序数组。我们必须使用二分查找算法搜索这个有理数数组的给定元素,而不使用浮点算法。

有理数是以 p/q 形式表示的数字,其中 p 和 q 都是整数。例如,⅔,⅕。

二分查找是一种搜索技术,通过查找数组中间元素来工作。

使用二分查找从有理数排序数组中查找元素,其中不允许使用浮点算法。我们将比较分子和分母,以找出哪个元素更大或哪个元素是需要找到的元素。

示例

让我们为此创建一个程序,

#include <stdio.h>
struct Rational {
   int p;
   int q;
};
int compare(struct Rational a, struct Rational b) {
   if (a.p * b.q == a.q * b.p)
      return 0;
   if (a.p * b.q > a.q * b.p)
      return 1;
   return -1;
}
int binarySearch(struct Rational arr[], int l, int r, struct Rational x) {
   if (r >= l) {
      int mid = l + (r - l)/2;
   if (compare(arr[mid], x) == 0) return mid;
   if (compare(arr[mid], x) > 0)
      return binarySearch(arr, l, mid-1, x);
   return binarySearch(arr, mid+1, r, x);
   }
   return -1;
}
int main() {
   struct Rational arr[] = {{1, 4}, {2, 3}, {3, 2}, {7, 2}};
   struct Rational x = {3, 2};
   int n = sizeof(arr)/sizeof(arr[0]);
   printf("在索引 %d 处找到元素", binarySearch(arr, 0, n-1, x));
}

输出

在索引 2 处找到元素

相关文章