October 18th, 2013, 07:49 AM

Using recursive function to sort an array
I am trying to use a recursive function to return the values of an array after sorting the integers stored, in ascending order. But I am not sure what to return in that function. Here is the code:
Code:
#include <stdio.h>
int selection_sort(int a[], int n);
int main(void)
{
int n, i;
printf("Enter the number of integers to enter: ");
scanf("%d", &n);
int a[n];
printf("\nEnter one integer per line: ");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
selection_sort(a, n);
printf("\nIn sorted order: ");
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
int selection_sort(int a[], int n)
{
int i, max;
max = a[0];
for (i = 0; i < n; i++) {
if (a[i] > max)
max = a[i];
a[i] = a[n  1];
a[n  1] = max;
}
if (n > 0) {
selection_sort(a, n  1);
}
/* What should I return here for the function to return the values of the array in the sorted order? */
}
Last edited by arman.khandaker; October 18th, 2013 at 07:53 AM.
October 18th, 2013, 08:44 AM

Originally Posted by arman.khandaker
But I am not sure what to return in that function.
That function doesn't require to return any value  simply change it's type to void.
EDIT:
Note that not all compilers allow to create variablelength arrays:Even if so, the value of n could be too large to allocate memory for the array on the stack causing the program to crash. Use dynamic memory allocation instead:
Code:
#include <stdlib.h>
int *a = malloc(n * sizeof(int));
if (a != NULL)
{
// ...
free(a);
}
Comments on this post
Last edited by DRK82; October 18th, 2013 at 09:05 AM.
October 18th, 2013, 09:12 AM

Originally Posted by DRK82
That function doesn't require to return any value  simply change it's type to
void.
EDIT:
Note that not all compilers allow to create variablelength arrays:
Even if so, the value of
n could be too large to allocate memory for the array on the stack causing the program to crash. Use dynamic memory allocation instead:
Code:
#include <stdlib.h>
int *a = malloc(n * sizeof(int));
if (a != NULL)
{
// ...
free(a);
}
Thanks, it worked. I had to modify the rest of my code a bit though, but it has nothing to do with return type of the function. Just to update:
Code:
#include <stdio.h>
void selection_sort(int a[], int n);
int main(void)
{
int n, i, b;
printf("Enter the number of integers to enter: ");
scanf("%d", &n);
int a[n];
printf("\nEnter one integer per line: ");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
selection_sort(a, n);
printf("\nIn sorted order: ");
if (a[0] > a[1]) {
b = a[0];
a[0] = a[1];
a[1] = b;
}
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
void selection_sort(int a[], int n)
{
int i, max;
max = a[0];
for (i = 0; i < n; i++) {
if (a[i] > max) {
max = a[i];
a[i] = a[n  1];
a[n  1] = max;
}
}
if (n > 0) {
selection_sort(a, n  1);
}
}