给定数组元素,插入一个元素,使得它左边的值小于等于它,右边的值大于它,求这个元素插入的位置:
//用vector初始化数组元素(随机值)
void Init_Vector(vector<int> &ivec)
{
for(int i = 0;i<10;++i)
{
ivec.push_back(rand()%100);
}
}
//打印
void PrintVector(vector<int> &ivec)
{
for(int i = 0;i<ivec.size();++i)
cout<<ivec[i]<<" ";cout<<endl;
}
//判断元素是否大于所有元素或小于所有元素
int Max_Min(vector<int>ivec,int k)
{
int min = 0;
int max = 0;
for(int i =0;i<ivec.size();i++)
{
if( k >= ivec[i])
max ++;
else min ++;
}
if(min == ivec.size())
return 0;
else if(max == ivec.size();
return ivec.size();
}
//如果该元素既不是最大元素也不是最小元素,采用二分法进行处理
int SelectLeftRight(vector<int> &ivec,int k)
{
int index= Max_Min(ivec,k);
if(index == 0)
return 0;
else if(index == ivec.size())
return ivec.size();
else
{
int i = 0, j = ivec.size()-1;
while(i<j)
{
while(i<j && k >= ivec[i]) ++i;
while(i<j && k < ivec[j]) --j;
if(i != j)
{
swap(ivec[i],ivec[j]);
}
}
return i;
}
}
int main()
{
vector<int> ivec;
Init_Vector(ivec);
PrintVector(ivec);
int k;
cin>>k;
int index = SelectLeftRight(ivec,k);
ivec.push_back(k) ; //在固定位置插入元素
cout<<index<<endl;
PrintVector(ivec);
return 0;
}
给定数组元素,替换一个元素,使得它左边的值小于等于它,右边的值大于它,求这个元素插入的位置
int SelectLeftRight(vector<int> &ivec,int k)
{
int i = 0, j = ivec.size()-1;
while(i<j)
{
while(i<j && k >= ivec[i]) ++i;
while(i<j && k < ivec[j]) --j;
if(i != j)
{
swap(ivec[i],ivec[j]);
}
}
return i;
}
int main()
{
vector<int> ivec;
Init_Vector(ivec);
PrintVector(ivec);
int k;
cin>>k;
int index = SelectLeftRight(ivec,k);
cout<<index<<endl;
return 0;
}