我正在为家庭作业编写一些代码,其中包括接收一个有序对列表,首先按x顺序升序对它们进行排序,对于相同的x值,按y顺序升序对点进行排序我已经成功地做到了,没有问题假设我有一个排序对结构的数组。
我需要以有序对的形式从用户接收输入,并执行二进制搜索以确定用户的有序对是否存在于我的数组中。但是,我对二进制搜索的理解仅限于int数组,而不是struct数组。
我是否需要使用二进制搜索来查找与用户具有相同x值的所有有序对,然后才在这些有序对中搜索匹配y值?
看看我以前为二进制搜索写的东西,我比较了数组的中间部分和我正在搜索的部分,但是对于有序对,这种比较是失败的我不能说一个有序的对是“小于”或“大于”另一个,除非我把它分解。


typedef struct ordPair {
        int x, y;
} point;
...

int main(void){
...
pointArray = (point*)malloc(numOfPoints * sizeof(point));
...
}


我希望搜索的输出返回pointarray[i]与用户提交的点等价的位置i,否则返回-1。

最佳答案

结构已经定义了如下顺序:
对于结构A和B:
如果A.x>B.x,则A大于
如果a.x如果A.x==B.x,则:
如果A.y>B.y,则A大于
如果A.y如果A.y==B.y,那么A和B是等价的
因此,在执行二进制搜索时,请使用上面的内容来确定一个结构是否大于、小于或等于另一个结构。

关于c - 在有序对结构数组上实现二进制搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56957894/

10-12 01:31