本帖最后由 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>
|