注意:二分查找的前提是:有序序列! 所以记得要先将序列排序,再进行二分查找(一般默认为在升序序列进行二分查找)
#include <iostream>
using namespace std;
//二分查找 在有序数组中查找x,默认为升序!
int Binary_search(int* a,int n,int x)
{
int left=0;
int right=n-1;
int mid=(left+right)/2;
while(left<=right)
{
if(a[mid]<x)
{
left=mid+1;
mid=(left+right)/2;
}
else if(a[mid]>x)
{
right=mid-1;
mid=(left+right)/2;
}
else
return mid;
}
return NULL;
}
//输出打印
void print(int* a,int n)
{
for(int i=0;i<n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
//选择排序升
void selectsort(int* a,int n)
{
int k,temp;
for(int i=0;i<n;i++)
{
k=i;
for(int j=i+1;j<n;j++)
{
if(a[j]<a[k])
k=j;
}
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
//冒泡排序降序
void bubbleSort(int* a,int n)
{
int temp;
for(int i=1;i<n;i++)//冒泡趟数
{
for(int j=n-1;j>=i;j--)
{
if(a[j]>a[j-1])
{
temp=a[j]; a[j]=a[j-1];a[j-1]=temp;
}
}
}
}
int main()
{
int arr[]={1,4,3,6,9,3,5,8,10};
cout<<"原始数组:"<<endl;
print(arr,sizeof(arr)/sizeof(int));
cout<<"排序后:"<<endl;
selectsort(arr,sizeof(arr)/sizeof(int));
print(arr,sizeof(arr)/sizeof(int));
cout<<"在有序序列中查找 3 如果存在,返回其下标,不存在则返回NULL"<<endl;
cout<<Binary_search(arr,sizeof(arr)/sizeof(int),9)<<endl;
cout<<"冒泡降序排列:"<<endl;
bubbleSort(arr,sizeof(arr)/sizeof(int));
print(arr,sizeof(arr)/sizeof(int));
return 0;
}