1.折半查找
描述
使用折半查找找出目标值所在位置。
输入
一个整数n
n个整数
要找的目标值
输出
要找的目标值在序列中的位置,如果找不到,输出"no answer"
样例输入
样例1输入
3
1 2 3
2
样例2输入
4
1 5 6 8
4
样例输出
样例1输出
2
样例2输出
no answer
#include <iostream>
#include<algorithm>
#include<iomanip>
#include<cstdalign>
using namespace std;
//折半查找-----返回在下标位置
int Bin_Search(int arr[],int left,int right,int key);
//数组传参 既可以是*arr,也可以写成arr[] --------本质上都是传进来数组的首地址
int Bin_Search(int arr[],int left,int right,int key){
int mid;
//设置递归结束的终止条件
if(left>right){
return 0;
}else{
//反之 递归不断循环的条件是 left<=right 注意这里的边界条件 是一个左闭右闭的
mid=left+(right-left)/2;//这里不建议直接写成(left+right)/2 因为有些题目可能出现越界的问题
if(key==arr[mid]){
return mid;
}else if(key<arr[mid]){
//左区间查找
return Bin_Search(arr,left,mid-1,key);
}
else{
//右区间查找
return Bin_Search(arr,mid+1,right,key);
}
}
}
int main()
{
int *arr,index,key;
int n;
cin>>n;
//一般0号元素作为哨兵 所以多开一个空间
arr=new int[n+1];//开辟一块空间
for(int i=1;i<=n;i++){
cin>>arr[i];
}
sort(arr+1,arr+n+1);
cout<<"输入你要查找的值:";
cin>>key;
if(index==0)
cout<<"no answer"<<endl;
else
cout<<index<<endl;
//记得释放这块空间
delete []arr;
return 0;
}
2. 寻找最大的数
描述
输入N个数(N<100),找到最大的那个数,然后和最后一个数互换位置
输入
两行
第一行一个整数n,代表数的个数
第二行是n个整数
输出
一行,n个整数
样例输入
5
3 88 4 9 7
样例输出
3 7 4 9 88
#include<iostream>
#include<algorithm>
using namespace std;
int find_max(int *a, int n);
int main()
{
int n,*a,index;
cin>>n;
a=new int[n];
for(int i=0;i<n;i++)
cin>>a[i];
index=find_max(a,n);
swap(a[index],a[n-1]);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
delete [] a;
return 0;
}
int find_max(int *a, int n)
{
int index=0;
for(int i=1;i<n;i++)
if(a[i]>a[index])
index=i;
return index;
}