您的位置:首页 > 其它

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

2013-05-18 23:22 399 查看
使用的是快速排序,加上两头夹逼来查找

#include <iostream>

using namespace std;

void QuickSort(int*s,int low,int
high)

{

int pivot_pos;

int i;

int j;

//当low=high时递归退出

if (low< high)

{

//首先确定一个基准数

pivot_pos = s[low];

i = low;

j = high;

//查找基准数

while
(i < j)

{

//从后往前查找

while
(i<j && s[j]>=pivot_pos)

j--;

if(i< j)

{

s[i]= s[j];

i++;

}

//从前往后查找

while
(i<j && s[i]<pivot_pos)

i++;

if
(i < j)

{

s[j]= s[i];

j--;

}

}

s[i]= pivot_pos;

QuickSort(s,low,i-1);

QuickSort(s,i+1,high);

}

}

void find_pair(int*s,int n,int
x)

{

int *begin=s;

int *end=s+n-1;

//俩头夹逼

while(begin<end)

{

if(*begin+*end>x)

{

end--;

}

else
if(*begin+*end<x)

{

begin++;

}

else

{

cout <<*begin<<" "<<*end<<endl;

begin++;

end--;

}

}

cout<<"No found!"<<" ";

}

int main()

{

int data[9]={8,3,5,8,9,1,2,4,4};

QuickSort(data,0,8);

int x;

while(cin>> x)

{

find_pair(data,8,x);

}

return 0;

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