In my code, I get a segmentation fault some, but not all of the times that I run it. Sometimes, it sorts the code and finds the needle, sometimes it doesn't sort correctly and ends with a segmentation fault or can't find the needle. Please help me fix this issue. My code is`/**
* helpers.c
*
* Helper functions for Problem Set 3.
*/
#include <cs50.h>
#include <stdio.h>
#include "helpers.h"
/**
* Returns true if value is in array of n values, else false.
*/
bool search(int value, int values[], int n)
{
if (value < 0) {
return false;
}
int low = values[0];
int high = values[n - 1];
int mid = (low + high) / 2;
if (mid == value) {
return true;
}
else if (mid < value) {
high = mid - 1;
}
else {
low = mid - 1;
}
search(value, values, n);
//printf("Low %i High %i Mid %i", low, high, mid);
//TODO: implement a searching algorithm
return false;
}
/**
* Sorts array of n values.
*/
void sort(int values[], int n)
{
int swapcount = 1;
//int iterations = 0;
//int swapcount = 1;
/*if (n == 1) {
return;
}*/
for (int i = 0; i < n-1 ; i++) {
if (values[i] > values[i + 1]) {
printf("before swap %i, %i\n", values[i], values[i + 1]);
int temp = values[i];
values[i] = values[i + 1];
values[i + 1] = temp;
printf("after swap %i, %i,\n", values[i], values[i + 1]);
swapcount++;
}
/*else {
printf("Nothing to swap\n");
}*/
/*for (int j = 0; j < n; j++) {
printf("%i\n", values[j]);
}*/
}
//return 0;
if (swapcount == 1) {
return;
for (int j = 0; j < n; j++) {
printf("Sorted array is %i", values[j]);
}
}
//iterations ++;
/*printf("%i Iterations\n", iterations);*/
/*printf("Sorted is\n");
for (int j = 0; j < n; j++) {
printf("%i\n", values[j]);
}*/
//printf("Your swapcount is %i\n", swapcount);
printf("%i swaps\n", swapcount);
for (int w = 0; w < n; w++) {
printf("array is %i\n", values[w]);
}
sort(values, n - 1);
// TODO: implement a sorting algorithm
//return;
}
`