给定排好序的数组A(从小到大),大小为n,现在给定数X,插入到给定的数组A中,保持排序(二分法)。
//二分查找
#include<iostream>
#include<string>
using namespace std;
#define max 100
void paixu(int s[],int n)
{
int temp;
for(int i=0;i<n-1;i++)//选择排序
for(int j=i+1;j<n;j++)
{
if(s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
void insert(int s[],int n,int pos,int m)
{
int i;
for(i=n-1;i>=pos;i--)
{
s[i+1]=s[i];
}
s[pos]=m;
}
int search(int s[],int n,int m)
{
int begin=0;
int end=n-1;//对数组二分查找,注意数组下标不可越界
int mid;
while(begin<=end)
{
mid=(begin+end)/2;
if(s[mid]>m)
{
mid--;
end=mid;
}
else if(s[mid]<m)
{
mid++;
begin=mid;
}
else
{
return mid;
}
}
return mid;
}
int main()
{
int a[max],i=0;
int n;
cout<<"请输入数组个数:";
cin>>n;
cout<<"请输入"<<n<<"个数组数字:";
for(int i=0;i<n;i++)
{
cin>>a[i];
}
paixu(a,n);
cout<<"排序后:"<<endl;
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
int m;
cout<<"请输入要插入的数:";
cin>>m;
int pos=search(a,n,m);
insert(a,n,pos,m);
cout<<"插入后:"<<endl;
for(int i=0;i<n+1;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
因为是对数组里面的数据进行查找和插入,必须特别注意数组数据下标,不能越界。