I'm trying to figure out how to find the first 20 numbers that are closest to 23 in an int array of 200 between numbers 1 - 100. I tried to break it into steps:

-subtract each number in the array by 23

-get the absolute value of that number

-use selection sort to get the smallest numbers

...and thats where I'm stuck. I can't just add 23 back to those numbers, because some were negative. Right now I'm getting a segmentation fault. Any help?

Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define ARRAY_SIZE 200 #define NUM_TO_FIND 20 int main(int argc, char *argv[]) { int numbers[ARRAY_SIZE]; int top[NUM_TO_FIND]; int idx; int i; int j; int k; int hold; srand(time(NULL)); memset(&top[0], 0, sizeof(int) * NUM_TO_FIND); for (idx = 0; idx < ARRAY_SIZE; idx++){ numbers[idx] = rand() % 99 + 1; } //here for (k = 0; k < ARRAY_SIZE; k++){ top[k] = numbers[k] - 23; top[k] = top[k]<0?0-top[k]:top[k]; } for(i = 0; i < ARRAY_SIZE; i++){ for(j = 0; j < ARRAY_SIZE; j++){ if(top[i] < top[j]){ hold = top[i]; top[i] = top[j]; top[j] = hold; } } } //here puts("Original Array:"); for (idx = 0; idx < ARRAY_SIZE; idx++) printf("%d ", numbers[idx]); puts("\nTop 20:"); for (idx = 0; idx < NUM_TO_FIND; idx++) printf("%d ", top[idx]); return 0; }