|
|
发表于 2022-11-9 16:08:18
|
显示全部楼层
本楼为最佳答案
本帖最后由 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>
复制代码 |
|