// 算法导论 两和等于特定数问题.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int BinarySearch(int a[],int l,int h,int x)
{
while(l<=h)
{
int mid=(l+h)/2;
if(a[mid]==x)
return mid;
if(a[mid]>x)
h=mid-1;
if(a[mid]<x)
l=mid+1;
}
return -1;
}
int compare(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int _tmain(int argc, _TCHAR* argv[])
{
bool find=false;
int x=88;
int i=0;
int a[10]={8,3,12,49,4,12,33,5,21,15};
qsort(a,10,sizeof(int),compare);
for(;i<10;i++)
{
if(BinarySearch(a,i+1,9,x-a[i])!=-1)
{
cout<<a[i]<<" "<<a[BinarySearch(a,i+1,9,x-a[i])]<<endl;
find=true;
}
}
if(!find)
{
cout<<"没有找到两个值和等于"<<x<<endl;
}
return 0;
}
给出一个运行时间为O(nlogn)的算法,使之能在给定一个由N个数构成的集合S和另一个整数x时,判断S中是否存在有两个其和等于x的元素