标签: bsearch

qsort和bsearch指针数组

我需要排序一个指向struc的指针数组.实际上,我需要在地址之间进行搜索,以查看数组中是否存在指向结构的指定指针.不幸的是,我在这些结构中没有任何"可比性"的东西,所以我只想按地址排序.我的代码是这样的:

item* arr[SIZE];
//something is inserted
qsort(arr, SIZE, sizeof(item*), (void*)compare_funct); 
//CUT
bsearch(curr, arr, SIZE, sizeof(item*), (void*)compare_funct);
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个compare_funct,只是将指针转换为int并返回它们的区别,但它似乎不起作用.特别是,当我进行bsearch时,即使我知道元素包含在数组中,我总是得到一个NULL作为返回值.

c libc qsort bsearch

2
推荐指数
1
解决办法
1692
查看次数

Ruby的bsearch find-minimum和find-any行为是什么?

我正在阅读Ruby的bsearch文档

似乎当该块返回true或false时,然后bsearch使用“ find-minimum”模式进行工作。有最大查找模式吗?

对于以下第3至第5种情况,我不太了解Ruby的bsearch find-minimum行为:

[10, 20, 50, 80, 110].bsearch{|a| a >= 25}
=> 50

[10, 20, 50, 80, 110].bsearch{|a| a >= 20}
=> 20

[10, 20, 50, 80, 110].bsearch{|a| a == 20}
=> nil

[10, 20, 50, 80, 110].bsearch{|a| a < 50}
=> nil

[10, 20, 50, 80, 110].bsearch{|a| a <= 50}
=> 10
Run Code Online (Sandbox Code Playgroud)
  • 对于第三种情况,为什么找不到20呢?
  • 对于第四种情况,为什么也找不到20呢?(第一个小于50)。
  • 对于5日的情况下,为什么它找到10,而不是20

同样,find-any当块不返回true或false而是返回数字时,bsearch似乎将使用该模式。但是我真的无法理解它在文档中的作用:

ary = [0, 4, 7, 10, 12]
# try …
Run Code Online (Sandbox Code Playgroud)

ruby bsearch

2
推荐指数
1
解决办法
64
查看次数

C中的bsearch函数

如果我有两个函数:

void SortStudents(char *studentList[], size_t studentCount) 
{
    qsort(studentList, sizeof(studentList)/sizeof(studentList[0]), sizeof(studentList[0]), Compare);
}

int Compare(const void *a, const void *b) 
{
    return (strcmp(*(char **)a, *(char **)b));
}
Run Code Online (Sandbox Code Playgroud)

使用 qsort 函数进行排序和比较,如何使用 bsearch 查找列表的子集。例如,如果我有两个列表:

  • (列表 A)鲍勃、吉米、李、詹姆斯、安妮
  • (名单 B)Jen、Jon、Lee、James、Steph

如何在列表 B 中搜索以找到 A 中的那些元素?

您是否也可以在列表 B 中进行搜索以查找 A 中没有的元素?

谢谢。

c qsort bsearch

1
推荐指数
1
解决办法
3064
查看次数

空指针发出奇数点问题

我正在使用C语言进行代码练习.

如下代码,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS

int ACDSort(const void *p1, const void *p2);
int Compare(const void *pKey, const void *pValue);
int main(void)
{
    char * strAry[4] = {"Hardware","Cookie","Boy","Power"};
    char * destStr = "Cookie";

    //qsort((void*)strAry, sizeof(strAry) / sizeof(char*), sizeof(char*), ACDSort);

    char **ptrAdr = (char**)bsearch((void*)destStr, strAry, sizeof(strAry) / sizeof(char*), sizeof(char*), Compare);

    printf("%s\n", *ptrAdr);
}

int Compare(const void *pKey, const void *pValue) {
    char *key = ((char*)pKey);
    char *value = *((char**)pValue);
    return strcmp(key, value);
}

int ACDSort(const void *p1, …
Run Code Online (Sandbox Code Playgroud)

c bsearch

0
推荐指数
1
解决办法
107
查看次数

标签 统计

bsearch ×4

c ×3

qsort ×2

libc ×1

ruby ×1