二分法查找
二分法查找,为什么没有运行出来#include<stdio.h>
int search(int a[],int t,int n);
int main()
{
int a;
int i,j,t,find;
for(i=0;i<5;i++)
scanf("%d",&a);
printf("请输入一个新的整数:");
scanf("%d",&t);
find=search(a,t,5);
if(find==-1)
printf("not found");
else
printf("t的值是数中第%个:",find);
return 0;
}
int search(int a[],int t,int n)
{
int left=0,right=4,mid;
while(left <= right)
{
mid=(left+right)/2;
if( t>a)
{
left = mid + 1;
}
else if(t<a)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
} 本帖最后由 jackz007 于 2022-11-9 16:29 编辑
#include<stdio.h>
void sort(int a[] , int b[] , int n)
{
int i , j , t ;
for(i = 0 ; i < n ; i ++) b = i ;
for(i = 0 ; i < n - 1 ; i ++) {
for(j = i + 1 ; j < n ; j ++) {
if(a] > a]) {
t = b ;
b = b ;
b = t ;
}
}
}
}
int search(int a[] , int t , int n)
{
int b , left = 0 , right = n , mid ;
sort(a , b , n) ;
while(left <= right)
{
mid = (left + right) / 2 ;
if(a] == t) {
return b ;
} else {
if(t > a]) left = mid + 1 ;
else right = mid - 1 ;
}
}
return -1 ;
}
int main(void)
{
int a , i , j , n , t , find ;
for(i=0 ; i < 5 ; i ++) scanf("%d" , & a) ;
printf("请输入一个新的整数 : ") ;
scanf("%d" , & t) ;
find = search(a,t,5);
if(find == -1) printf("not found\n") ;
else printf("t的值是数中第 %d个\n" , find + 1);
return 0 ;
}
编译运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 5
t的值是数中第 1个
D:\\C>g++ -o x x.c
D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 1
t 的值是数中第 5个
D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 3
t 的值是数中第 1个
D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 5
t 的值是数中第 2个
D:\\C> jackz007 发表于 2022-11-9 16:08
请问我的是哪儿错了啊
h-b-z-d-j-s-m 发表于 2022-11-9 16:29
请问我的是哪儿错了啊
第 20 行 right = 4,应该是 right = n
页:
[1]