您的位置:首页 > 其它

给一个有N个整数的数组S..和另一个整数X,判断S里有没有2个数的和为X,请设计成O(n*log2(n))的算法

2014-07-15 21:13 344 查看
思路:先从小到大排序,然后分别从头start到尾end的和判断下一步,如果大于X,尾部end--,如果小于X,头部start++

#include<iostream.h>

void QuickSort(int S[],int start,int end)  //快速排序
{
if(start<end)
{
int tmp=S[start],i=start,j=end;
while(i!=j)
{
while(tmp<=S[j]&&i<j)
j--;
while(tmp>=S[i]&&i<j)
i++;
if(i<j)
{
int temp;
temp=S[i];
S[i]=S[j];
S[j]=temp;
}
}
S[start]=S[i];
S[i]=tmp;
QuickSort(S,start,i-1);
QuickSort(S,i+1,end);
}

}

bool SearchSumX(int S[],int X,int start,int end)
{
if(S[start]>=X)
return false;
int i=start,j=end;
while(i<j)
{
if((S[i]+S[j]<X)&&i<j)
i++;
else if((S[i]+S[j]>X)&&i<j)
j--;
else if((S[i]+S[j]==X)&&i<j)
return true;
}
if(i==j)
return false;
}

void main()
{

int S[10]={12,4,9,18,10,1,25,11,6,7};

int X=20;

QuickSort(S,0,sizeof(S)/sizeof(int)-1);

if(SearchSumX(S,X,0,sizeof(S)/sizeof(int)-1))
cout<<"Exist!"<<endl;
else
cout<<"No Exist!"<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐