|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
二分法查找,为什么没有运行出来
- #include<stdio.h>
- int search(int a[],int t,int n);
- int main()
- {
- int a[5];
- int i,j,t,find;
- for(i=0;i<5;i++)
- scanf("%d",&a[i]);
- 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[mid])
- {
- left = mid + 1;
- }
- else if(t<a[mid])
- {
- 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] = i ;
- for(i = 0 ; i < n - 1 ; i ++) {
- for(j = i + 1 ; j < n ; j ++) {
- if(a[b[i]] > a[b[j]]) {
- t = b[i] ;
- b[i] = b[j] ;
- b[j] = t ;
- }
- }
- }
- }
- int search(int a[] , int t , int n)
- {
- int b[n] , left = 0 , right = n , mid ;
- sort(a , b , n) ;
- while(left <= right)
- {
- mid = (left + right) / 2 ;
- if(a[b[mid]] == t) {
- return b[mid] ;
- } else {
- if(t > a[b[mid]]) left = mid + 1 ;
- else right = mid - 1 ;
- }
- }
- return -1 ;
- }
- int main(void)
- {
- int a[5] , i , j , n , t , find ;
- for(i=0 ; i < 5 ; i ++) scanf("%d" , & a[i]) ;
- 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:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 3 5 2 8 1
- 请输入一个新的整数 : 5
- t的值是数中第 1个
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 3 5 2 8 1
- 请输入一个新的整数 : 1
- t 的值是数中第 5个
- D:\[00.Exerciese.2022]\C>x
- 3 5 2 8 1
- 请输入一个新的整数 : 3
- t 的值是数中第 1个
- D:\[00.Exerciese.2022]\C>x
- 3 5 2 8 1
- 请输入一个新的整数 : 5
- t 的值是数中第 2个
- D:\[00.Exerciese.2022]\C>
复制代码
|
|