实现前N小的和算法

1.
如果使用比较朴素的方法，先算出所有的和，一共有N^2个，然后排序，则时间复杂度是O(N^2logN)；空间复杂度是O(N^2)。采用堆的办法的话，先对两个子序列进行排序，时间复杂度是O(NlogN)，因为排序后A1
+ B1肯定是最小的和，这时候先将A[i] + B[0]都放入堆中，占用O(N)的空间复杂度。最小对顶元素应该是A[0] +
B[0]，弹出堆顶元素(heap_sift_down调整)，然后将A[0] +
B[1]入堆，经过heap_sift_up调整，得到的堆顶元素A[i] + B[j]应该是第二小的和，继续弹出堆顶，并加入A[i] + B[j
+ 1]，这样经过N次出堆和入堆操作，就能够得到前N小的和，时间复杂度为O(NlogN)，空间复杂度为O(N)；
2.
qsort()使用时需要包含头文件stdlib.h或者cstdlib。它的形参分别为待排序数组指针，待排序数组大小，待排序数组元素的字节数目（一般用sizeof()计算得来）和cmp函数指针。cmp函数在使用时需要注意它的返回值为int，形参类型为const
void*，在函数体内部需要将const void*强制转换为int*，然后再解指针，比如int sub = *(int*)a -
*(int*)b.