基本上,我正在创建一个程序,如果在给定数组中找到该数字,则将输出该数字;如果未找到,则输出-1。 (排序数组。)
#include <stdio.h>
#include <stdlib.h>
int cmp(const void*a,const void *b){
if(*(int*)a-*(int*)b>0) return 1;
if(*(int*)a-*(int*)b<0) return -1;
return 0;
}
int main() {
int n; scanf("%d",&n);
int a[n];
for(int i =0;i<n;i++)
scanf("%d",a+i);
for(int i =0;i<n;i++){
int *item;
item = (int*)bsearch(&i,a,n,sizeof(int),cmp);
if(item!=NULL) printf("%d ",i);
else printf("-1 ");
}
return 0;
}
输入:10
-1 -1 6 1 9 3 2 -1 4 -1
输出:
-1 1 2 3 4 -1 6 -1 -1 9
我的输出:
-1 -1 -1 3 4 -1 -1 -1 -1 -1
答案 0 :(得分:0)
https://www.tutorialspoint.com/c_standard_library/c_function_bsearch.htm
C库函数void * bsearch(const void * key,const void * base,size_t nitems,size_t size,int(* compar)(const void *,const void *))函数搜索一系列nitems对象,对于与键指向的对象匹配的成员,其初始成员由base指向。数组每个成员的大小由大小指定。
根据compar引用的比较函数,数组的内容应按升序排列。
二进制搜索的全部要点是,如果数组的大小为size
,则从位置size/2
开始。如果此元素小于所需的内容,请转到size/2 + size/4
,否则转到size/2 - size/4
。如果这种方法可行,则需要对数组进行排序。
在此处了解有关二进制搜索的更多信息:https://en.wikipedia.org/wiki/Binary_search_algorithm
正如评论中提到的,scanf("%d",a+i)
是正确的,但是scanf("%d",&a[i])
是更可取的。