Сформировать из массива другой массив, содержащий цифры, расположенные по возрастанию - C (СИ)

Формулировка задачи:

Здравствуйте! Дан массив чисел
a=[1,4,0,3,7,3,5,8,10,6,2,7,8]
Сформировать из этого массива другой массив, содержащий цифры, расположенные по возрастанию, т.е. получится
a=1,4,3,7,3,5,8,10,2,7,8
Я анализировал методы сортировки, но видимо опыта не хватает на реализацию данной задачи. Заранее спасибо!
#include <stdio.h>
#include <locale.h> 
void input_keyboard(int s)
{
    int a[s];
 
    printf("Введите элементы матрицы А: \n");
    for (int i=0; i<s; i++)
    scanf ("%d", &a[i]);
}
void sort(int s)
{ 
int a[s],i,j,tmp;
for(i = 0 ; i < s - 1; i++) { 
       for(j = 0 ; j < s - i - 1 ; j++) {  
           if(a[j] > a[j+1]) {           
              tmp = a[j]; 
              a[j] = a[j+1]; 
              a[j+1] = tmp; 
           }
        }
    }
    printf("\n Результат Матрица:  \n");
    for (i=0; i<s; i++)
    printf ("%d ", a[i]);
}
void vyvod (int s)
{
    int a[s];
    printf("\n Матрица:  \n");
    for (int i=0; i<s; i++)
 
    printf ("%d ", a[i]);   
}
int main() {
    int n;
setlocale (LC_ALL, "Russian");
printf("Введите размерность матрицы:  \n");
scanf("%d",&n);
input_keyboard(n);
vyvod(n);
sort(n);
}

Код к задаче: «Сформировать из массива другой массив, содержащий цифры, расположенные по возрастанию - C (СИ)»

textual
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int* GetAscendingSequences(const int* const arr, const int n, int* const resArrLength)
{
  int* res = NULL;
  int* temp = NULL;
 
  int newLength = 0;
  int i = 0;
  int flag = 0;
 
  res = malloc(n * sizeof(*res));
 
  if (res != NULL)
  {
    memset(res, 0, n * sizeof(*res));
 
    i = 0;
    flag = 0;
    while (i < n)
    {
      if (flag && (i == (n - 1)))
      {
        /* there can be a not closed sequence at the end */
        res[newLength] = arr[i];
        newLength++;
        flag = 0;
      }
      else
      {
        if (arr[i] < arr[i+1])
        {
          /* we have a sequence */
          flag = 1;
          res[newLength] = arr[i];
          newLength++;
        }
        else
        {
          if (flag)
          {
            /* ending sequence */
            res[newLength] = arr[i];
            newLength++;
            flag = 0;
          }
        }
      }
      i++;
    }
 
    if (newLength < n)
    {
      temp = realloc(res, newLength * sizeof(temp));
 
      if (temp == NULL)
      {
        free(res);
        res = NULL;
      }
      else
      {
        res = temp;
        temp = NULL;
      }
    }
 
    (*resArrLength) = newLength;
  }
 
  return res;
}
 
int main(void)
{
  int a[13] = {1,4,0,3,7,3,5,8,10,6,2,7,8};
  int* b = NULL;
 
  int N = 0;
  int i = 0;
 
  b = GetAscendingSequences(a, 13, &N);
 
  if (b != NULL)
  {
    for(i = 0; i < N; i++) printf("%d ", b[i]);
  }
 
  return 0;
}
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

8   голосов, оценка 4.500 из 5


СДЕЛАЙТЕ РЕПОСТ