void sort(int *a, int left, int right)
{
if(left >= right)
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i < j)
{
while(i < j && key <= a[j])
{
j--;
}
a[i] = a[j];
while(i < j && key >= a[i])
{
i++;
}
a[j] = a[i];
}
a[i] = key;
sort(a, left, i - 1);
sort(a, i + 1, right);
}
int** threeSum(int* nums, int numsSize, int* returnSize) {
sort(nums, 0, numsSize-1);
int result = 0;
int target = 0;
int** rets = (int**)malloc(sizeof(int*)*numsSize*2);
int index = 0;
int is_exist = 0;
for (int i=0; i< numsSize-2; ++i)
{
int j = i+1;
int k = numsSize - 1;
while(j < k){
result = nums[i]+nums[j]+nums[k];
if (result < target)
{
++j;
}else if (result > target)
{
--k;
}else {
for (int p=0; p< index; ++p)
{
if (rets[p][0] == nums[i]&&rets[p][1] == nums[j])
{
is_exist = 1;
break;
}
}
if (is_exist == 0)
{
rets[index] = (int*)malloc(sizeof(int)*3);
rets[index][0] = nums[i];
rets[index][1] = nums[j];
rets[index][2] = nums[k];
++index;
}
is_exist = 0;
--k;
}
}
}
*returnSize = index;
return rets;
}