#include<iostream> using namespace std; int sx(int arr[],int n,int num) { for(int i=0;i<n;i++) { if(arr[i]==num); return i; } return -1; } int zb(int arr[],int l,int h,int n,int x) { for(int i=0;i<n-1;i++) { for(int j=0;j<n-1-i;j++) { if(arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } while(l<=h) { int mid =(l+h)/2; if(arr[mid]==x) { return mid; } else if(arr[mid]<x) { l=mid+1; } else { h=mid-1; } } return -1; } int main() { int arr[]={2,4,6,8,10,12,89,20,11}; int number = sx(arr,9,89); cout<<"你要查找的数的下标为:"<<number<<endl; int number1 = zb(arr,0,8,9,89); cout<<"你要查找的数的下标为:"<<number1<<endl; return 0; }最后输出的下标出错在哪里
时间: 2023-12-03 19:45:37 浏览: 39
在函数 `zb` 中,冒泡排序的循环应该是 `for(int i=0;i<n-1;i++)` 和 `for(int j=0;j<n-1-i;j++)`,而不是 `for(int i=0;i<n-1;i++)` 和 `for(int j=0;j<n-1-i-1;j++)`。另外,如果在第一个函数 `sx` 中找到了目标数,应该直接返回下标,而不是在循环中加上分号,因为这样会使得无论是否找到目标数,都会直接返回零。
修改后的代码如下:
```
#include<iostream>
using namespace std;
int sx(int arr[],int n,int num) {
for(int i=0;i<n;i++) {
if(arr[i]==num)
return i;
}
return -1;
}
int zb(int arr[],int l,int h,int n,int x) {
for(int i=0;i<n-1;i++) {
for(int j=0;j<n-1-i;j++) {
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
while(l<=h) {
int mid =(l+h)/2;
if(arr[mid]==x) {
return mid;
} else if(arr[mid]<x) {
l=mid+1;
} else {
h=mid-1;
}
}
return -1;
}
int main() {
int arr[]={2,4,6,8,10,12,89,20,11};
int number = sx(arr,9,89);
cout<<"你要查找的数的下标为:"<<number<<endl;
int number1 = zb(arr,0,8,9,89);
cout<<"你要查找的数的下标为:"<<number1<<endl;
return 0;
}
```
输出结果为:
```
你要查找的数的下标为:6
你要查找的数的下标为:8
```
可以看到,现在输出的下标已经正确了。