题目来源:http://ac.jobdu.com/problem.php?pid=1052
-
题目描述:
-
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
-
输入:
-
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
-
输出:
-
对于每组输入,请输出结果。
-
样例输入:
-
2 1 3 0
-
样例输出:
-
-1
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 210;
int Partition(int* arr, int low, int high)
{
if(low >= high)
return low;
int i = low, j = high+1;
while (i < j)
{
++i;
while(arr[i] < arr[low])
++i;
--j;
while(arr[j] > arr[low])
--j;
if(i < j && arr[i] != arr[j])
arr[i] ^= arr[j], arr[j] ^= arr[i], arr[i] ^= arr[j];
}
if(arr[j] != arr[low])
arr[j] ^= arr[low], arr[low] ^= arr[j], arr[j] ^= arr[low];
return j;
}
void Quick_Sort(int* arr, int low, int high)
{
if(low >= high)
return ;
int mid = Partition(arr, low, high);
Quick_Sort(arr, low, mid-1);
Quick_Sort(arr, mid+1, high);
}
void Binary_Search_TargetNum(int* arr, int x, int &index, int low, int high)
{
if(low > high)
return ;
int iMid = (low + high)>>1;
if(arr[iMid] == x)
{
index = iMid;
return ;
}
else if(arr[iMid] > x)
Binary_Search_TargetNum(arr, x, index, low, iMid-1);
else
Binary_Search_TargetNum(arr, x, index, iMid+1, high);
}
int main()
{
int arr[MAXN], b[MAXN], n, i, iData;
while (~scanf("%d", &n) && n)
{
for (i = 0; i < n; ++i)
{
scanf("%d", &arr[i]);
b[i] = arr[i];
}
Quick_Sort(b, 0, n-1);
scanf("%d", &iData);
int index = -1;
Binary_Search_TargetNum(b, iData, index, 0, n-1);
if(index != -1)
{
for (i = 0; i < n; ++i)
{
if(arr[i] == iData)
index = i;
}
}
printf("%d\n", index);
}
return 0;
}