Atanu Mondal
Atanu Mondal

Reputation: 61

Error in selection sort with function in C

I am trying to do a selection sort using function called min().

This is my code:

#include <stdio.h>
#include <conio.h>

void main() {
    int i, temp, arr[20], n, loc;
    int min(int [], int, int);
    printf("Enter a range of the array");
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("Enter elements");
        scanf("%d", arr[i]);
    }
    for (i = 0; i < n; i++) {
        loc = min(arr, i, n);
        temp = arr[i];
        arr[i] = arr[loc];
        arr[loc] = temp;
    }
    min(int arr[], int i, int n) {
        int j, loc, temp;
        for (j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                temp = j;
            }
        }
        return (temp);
     }
     getch();
}

the compiler is giving one error when compiling. it saying:

Error SELECTIONSORT.C 22: Expression Syntax.

my line number 22 is min(int arr[],int i, int n) according to my compiler Turbo C++.

Please guide me where I am going wrong. Thanks for any help.

Upvotes: 2

Views: 157

Answers (1)

chqrlie
chqrlie

Reputation: 144780

There are multiple problems in your code:

  • The function min must be defined outside the body of the main() function.

  • Note that it is considered bad style to declare function prototypes in a local scope. Either define the function before the main() function or put the prototype before the main() function.

  • Also the prototype for main() without arguments should be int main(void).

  • In function min, you must initialize temp to i, or use i directly.

  • You should print the array contents after the sort, otherwise the program has no effect.

Here is a corrected version:

#include <stdio.h>
#include <conio.h>

int min(int [], int, int);

int main(void) {
    int i, temp, arr[20], n, loc;
    printf("Enter a range of the array: ");
    if (scanf("%d", &n) == 1) {
        for (i = 0; i < n && i < 20; i++) {
            printf("Enter element %d: ", i);
            if (scanf("%d", &arr[i]) != 1)
                break;
        }
        n = i; // n is the actual number of inputs
        for (i = 0; i < n; i++) {
            loc = min(arr, i, n);
            temp = arr[i];
            arr[i] = arr[loc];
            arr[loc] = temp;
        }
        for (i = 0; i < n; i++) {
            printf("%d\n" array[i]);
        }
    }
    getch();
    return 0;
}

int min(int arr[], int i, int n) {
    int j;
    for (j = i + 1; j < n; j++) {
        if (arr[i] > arr[j]) {
            i = j;
        }
    }
    return i;
 }

Upvotes: 3

Related Questions