无序序列的折半查找,最终输出原数组中要寻找的数的下标
- 要使用折半查找那提供的数组一定要是有序的,可是当提供的是无序序列时,很多时候我们都是先将无序序列排序,然后输出想要找的数的下标,这显然不太对,我们现在要输出的是排序前的数在数组中的下标。一个思路就是再创建一个数组存储原先数组的下标,这里我利用冒泡排序将存数的数组和存下标的数组都排序,最终输出的就是想要的那个数在原数组的下标。
#include <iostream>
using namespace std;
int x[101],v[101];
void paixu(int x[], int v[], int n)
{
for(int i=0;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(x[i] > x[j])
{
int temp = x[i];
x[i] = x[j];
x[j] = temp;
int vtemp = v[i];
v[i] = v[j];
v[j] = vtemp;
}
}
}
}
int zheban(int x[], int key, int n)
{
int begin = 0;
int end = n-1;
int mid = 0;
while(begin <= end)
{
mid = (begin + end)/2;
if(key > x[mid])
{
begin = mid + 1;
}
if(key < x[mid])
{
end = mid - 1;
}
if(key == x[mid])
return v[mid];
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>x[i];
v[i] = i;
}
int key;
cin>>key;
paixu(x,v,n);
cout<<zheban(x,2,n)<<endl;
}