Отсортировать четные элементы, а нечетные оставить на местах - C (СИ)

Узнай цену своей работы

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

Здравствуйте, долго мучаюсь и не могу понять. Нужно отсортировать четные элементы, а не четные оставить на местах. Например ввожу 1 4 5 2 6 8 4 Нужно 1 2 5 4 4 6 8. у меня получилось отсортировать весь массив, думаю нужно составить еще условие, чтоб нечетные элементы не менялись. но у меня не получается. помоги плиз!!
#include <iostream>
#include <stdlib.h>
#include <conio.h>
int form (int a[100])
{
int n;
printf ("\n enter " ) ;
scanf ("%d",&n);
for (int i=0; i<n; i++)
a[i]=rand()%15;
return n;
}
 
void print (int a[100], int n)
{
for (int i=0; i<n; i++) 
printf ("%d ",a[i]) ; 
printf ("\n" ) ; 
}
 
void dell (int a[100], int &n)
{
int i;
int t;
int j=0, b [100];
 
for ( i=0; i<n; i++)
if (a[i] %2!=1 ) 
{

for (int i=0;i<n;i++)
for (int j=0; j<n;j++)
if (a[j] > a[j+1]) { 
t = a[j];
a[j] = a[j+1];
a[j+1] = t ;
} 

} 

}

int main ()
{
int a[100];
int n;
n=form(a);
print (a,n);
dell (a,n);
print (a,n);
}

Решение задачи: «Отсортировать четные элементы, а нечетные оставить на местах»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int form (int a[100])
{
    int n;
    printf ("enter : " ) ;
    scanf ("%d",&n);
    srand(time(NULL));
    for (int i=0; i<n; i++)
      a[i]=rand()%15;
    return n;
}
 
void print (int a[100], int n)
{
    for (int i=0; i<n; i++)  
        printf ("%02d ",a[i]) ;  
    printf ("\n" ) ;  
}
 
void swap(int a[100], int n)
{
   int i, temp;
   int flag = 1;
 
   while (flag) {
      flag = 0;
      int *ptr = NULL,
          *last = NULL;
      for (i=0; i<n; i++) 
         if (a[i]%2 == 0) {
            if (last == NULL)
               last = ptr = &a[i];
            else {
               last = ptr;
               ptr = &a[i];
            }
            if (*last > *ptr) {
               temp = *last;
               *last = *ptr;
               *ptr = temp;
               flag = 1;
            }
         }
   }
}
 
 
int main ()
{
    int a[100];
    int n;
    while (n=form(a)) {
      print (a,n);
      swap (a,n);
      print (a,n);
    }
}

Объяснение кода листинга программы

В этом коде выполняется сортировка массива целых чисел по чётности с использованием алгоритма сортировки выбором. Вот список действий, которые выполняются в этом коде:

  1. Функция form используется для ввода количества элементов в массив.
  2. Функция print используется для печати содержимого массива в консоль.
  3. Функция swap используется для сортировки массива по чётности.
  4. В цикле while вызывается функция form, чтобы ввести количество элементов для сортировки.
  5. Внутри цикла while массив выводится на консоль с помощью функции print.
  6. Затем вызывается функция swap для сортировки массива по чётности.
  7. После сортировки массив выводится на консоль с помощью функции print.
  8. Цикл while продолжается до тех пор, пока пользователь не введет ноль для количества элементов.
  9. В конце программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы