#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
void findTriplets(int arr[], int n) {
qsort(arr, n, sizeof(int), compare);
for (int i = 0; i < n - 2; i++) {
// Skip duplicate values for i
if (i > 0 && arr[i] == arr[i - 1])
continue;
int left = i + 1;
int right = n - 1;
while (left < right) {
int sum = arr[i] + arr[left] + arr[right];
if (sum == 0) {
printf("Triplet: %d, %d, %d\n", arr[i], arr[left], arr[right]);
// Skip duplicates for left and right
while (left < right && arr[left] == arr[left + 1]) left++;
while (left < right && arr[right] == arr[right - 1]) right--;
left++;
right--;
}
else if (sum < 0) {
left++;
}
else {
right--;
}
}
}
}
int main() {
int arr[] = { 1, 0, 3, 2, -1, -2, -3, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
findTriplets(arr, n);
return 0;
}
/*
run:
Triplet: -3, -1, 4
Triplet: -3, 0, 3
Triplet: -3, 1, 2
Triplet: -2, -1, 3
Triplet: -2, 0, 2
Triplet: -1, 0, 1
*/