Search code examples
arrayscsortingfunction-definition

How to sort an array that going down and then going up, to array that going down all the way?


I have an assignment to make a function that sort array that going down and then going up (for example: 9, 8, 7, 6, 5, 7, 11, 13) to array that going down all the way (for example: 13, 11, 9, 8, 7, 7, 6, 5).

I wrote this in online compiler (programiz), but it just doesn't work for me.

#include <stdio.h>
#include <stdlib.h>
#define N 10

void sort_dec_inc(int a[], int n) {
  int pivot, i, q = 0;
  int c[n];
  for (i=0; i<n; i++) {
      c[i] = 0;
  }
  for (i=0; i<n-1; i++) {
      if (a[i]<a[i+1]) {
          pivot=i+1;
          break;
      }
  }
  if (pivot == n-1) {
      return;
  }

  for (i=0; i<pivot && n>=pivot; q++) {
      if (a[i]>=a[n]) {
          c[q] = a[i];
          i++;
      }
      else {
          c[q] = a[n];
          n--;
      }
   }
   
   
   if (n==pivot) {
       while(i<pivot) {
           c[q] = a[i];
           q++;
           i++;
       }
   }
   else {
       while (n>=pivot) {
           c[q] = a[n];
           q++;
           n--;
       }
   }
   
   for(i=0; i<n; i++) {
       a[i] = c[i];
   }
   
   
}

int main()
{
    int num_arr[N] = {9, 7, 5, 3, 1, 2, 4, 6, 8, 10};
    sort_dec_inc(num_arr, N);
    int i;
    for(i = 0; i < N; i++) {
        printf("%d ", num_arr[i]);
    }

    return 0;
}

output (most of the times) : 9 7 5 3 1 2 4 6 8 10

Sometimes the output is different, for example: (410878976 10 9 8 1 2 4 6 8 10 )

If someone can answer in simple code its the best, I don't understand yet all the options in C.

(I'm sorry if its a clumsy code, I'm new for this.) thanks a lot!


Solution

  • Solution based on the comments below:

    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    
    void sort_dec_inc(int a[], int n) {
      int left, i = 0;
      int right = n-1;
      int c[n];
      while (i<n) {
          if (a[left] >= a[right]) {
              c[i] = a[left];
              left++;
          }
          else {
              c[i] = a[right];
              right--;
          }
          i++;
      }
      
      for(i=0; i<n; i++) {
           a[i] = c[i];
       }
       
    }
    
    int main()
    {
        int num_arr[N] = {9, 7, 5, 3, 1, 2, 4, 6, 8, 10};
        sort_dec_inc(num_arr, N);
        int i;
        for(i = 0; i < N; i++) {
            printf("%d ", num_arr[i]);
        }
    
        return 0;
    }
    

    output: 10 9 8 7 5 5 4 3 2 1