/************************************************************************
Question description:
give a O(nlgn) time algorithm for determining if there exist two elements
in an set S whose sum is exactly some value x
************************************************************************/
/************************************************************************
Solution:
merge sort and binary search, the time costed are all O(nlgn)
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "MergeSort.h"
#include "BinarySearch.h"
int main(int argc, char const *argv[])
{
/* code */
int array[20] = {9,7,6,34,1,23,5,25,6,2,64,56,36,4,57,7,1,6,27,33};
merge_sort(array, 0, 19);
int x = 5;
int temp;
for (int i = 0; i < 20; i++) {
temp = binary_search(array, 20, x - array[i]);
if (temp != -1 && temp != i) {
printf("success!%d && %d\n", i, temp);
}
}
/* printArray(array, 0, 19);
printf("%d\n", binary_search(array, 20, 26));
*/
return 0;
}
算法导论2.3-7
最新推荐文章于 2022-09-26 07:39:18 发布