找出n个元素的实数集合S中,是否存在两个元素的和等于给定的实数X?

《算法導論》裏的一個練習題:

找出n个元素的实数集合S中,是否存在两个元素的和等于给定的实数X?
要求: O(nlg#include <stdlib.h>


void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)); 
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)); 

#define EPSION 1e-5 int doublecompar(double* r1, double *r2) { double d = *r1 - *r2; return fabs(d) < EPSION ? 0 : d < 0.0 ? 1 :-1; }
int find_x_sum(double *s, int n, double x) { int k; qsort(s, n, sizeof(double), doublecompar); for (k=0; k<n; k++) { double key = x-s[k]; double *res = NULL;
     if (key<s[k]) return 0;

if (res = bsearch(&key, s+k+1, n-k-1, sizeof(double), doublecompar)) { printf("%lf + %lf = %lf\n", key, *res, x); return 1; } } return 0; }
原文地址:https://www.cnblogs.com/prajna/p/2932734.html