我需要排序一个指向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作为返回值.
我正在阅读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)。10,而不是20?同样,find-any当块不返回true或false而是返回数字时,bsearch似乎将使用该模式。但是我真的无法理解它在文档中的作用:
ary = [0, 4, 7, 10, 12]
# try …Run Code Online (Sandbox Code Playgroud) 如果我有两个函数:
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 查找列表的子集。例如,如果我有两个列表:
如何在列表 B 中搜索以找到 A 中的那些元素?
您是否也可以在列表 B 中进行搜索以查找 A 中没有的元素?
谢谢。
我正在使用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)