Отсортировать четные элементы, а нечетные оставить на местах - 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);
}
}
Объяснение кода листинга программы
В этом коде выполняется сортировка массива целых чисел по чётности с использованием алгоритма сортировки выбором. Вот список действий, которые выполняются в этом коде:
- Функция
formиспользуется для ввода количества элементов в массив. - Функция
printиспользуется для печати содержимого массива в консоль. - Функция
swapиспользуется для сортировки массива по чётности. - В цикле
whileвызывается функцияform, чтобы ввести количество элементов для сортировки. - Внутри цикла
whileмассив выводится на консоль с помощью функцииprint. - Затем вызывается функция
swapдля сортировки массива по чётности. - После сортировки массив выводится на консоль с помощью функции
print. - Цикл
whileпродолжается до тех пор, пока пользователь не введет ноль для количества элементов. - В конце программа завершается.