Сортировка четных элементов массива по возрастанию, а нечетных-по убыванию - C (СИ)

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

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

Задача в общем такая: Дан целочисленный массив.Отсортировать его четные элементы по возрастанию, а не чётные по убыванию
В набросках имею вот это.в чём подвох не пойму))просветите)
#include <stdio.h>

void SortArray(int *arr,int *razmer)
{
        int k=*razmer-1,p=*razmer-2;
        if((*razmer%2)==0)
        {
                k=*razmer-2;
                p=*razmer-1;
        }
        for (int i=0;i<*razmer-2;i+=2)
                for(int j=k;j>i;j-=2)
                    if(arr[j]>arr[j-2])
                        {
                                int c=arr[j];
                                arr[j]=arr[j-2];
                                arr[j-2]=c;
                        }
        for (int i=1;i<*razmer-2;i+=2)
                for(int j=p;j>i;j-=2)
                    if(arr[j]<arr[j-2])
                        {
                                int c=arr[j];
                                arr[j]=arr[j-2];
                                arr[j-2]=c;
                        }

}

int main(int argc, char *argv[])
{
    int n;
        printf ("Vvedite razmer matrici: ");
        scanf("%d",&n);
        int a[n];
        printf ("Vvedite razmer matrici: \n");
        for (int i=0;i<n;i++)
                scanf("%d",&a[i]);
        SortArray(a, &n);
        for (int i=0;i<n;i++)
                printf ("%3d",a[i]);
 
    return 0;
}
Вот вроде так.если есть ошибки отпишите пожалуйста
#include <stdio.h>

void SortArray(int *arr,int *razmer)
{
        int k=*razmer-1,p=*razmer-2;
        if((*razmer%2)==0)
        {
                k=*razmer-2;
                p=*razmer-1;
        }
        for (int i=0;i<*razmer-2;i+=2)
                for(int j=k;j>i;j-=2)
                    if(arr[j]<arr[j-2])
                        {
                                int c=arr[j];
                                arr[j]=arr[j-2];
                                arr[j-2]=c;
                        }
        for (int i=1;i<*razmer-2;i+=2)
                for(int j=p;j>i;j-=2)
                    if(arr[j]>arr[j-2])
                        {
                                int c=arr[j];
                                arr[j]=arr[j-2];
                                arr[j-2]=c;
                        }

}

int main(int argc, char *argv[])
{
    int n;
        printf ("Vvedite razmer matrici: ");
        scanf("%d",&n);
        int a[n];
        printf ("Vvedite razmer matrici: \n");
        for (int i=0;i<n;i++)
                scanf("%d",&a[i]);
        SortArray(a, &n);
        for (int i=0;i<n;i++)
                printf ("%3d",a[i]);
 
    return 0;
}

Решение задачи: «Сортировка четных элементов массива по возрастанию, а нечетных-по убыванию»

textual
Листинг программы
#include <stdio.h>
#include <time.h>
 
int* createRandomArray(int);
void sortArray(int*, int);
void showArray(int*, int);
void swap(int*, int*);
 
int main() {
    int n;
    printf("Enter n:"); scanf("%d", &n);
    
    srand(time(0));
    int* arr = createRandomArray(n);
    
    showArray(arr, n);
    printf("\n");
    
    sortArray(arr, n);
    showArray(arr, n);
    
    free(arr);
    return 0;
}
 
int* createRandomArray(int n){
    int* a = (int*)calloc(n, sizeof(int));
    while(n--){
        a[n] = rand() % 10;
    }
    return a;
}
 
void showArray(int* a, int n){
    int i;
    for(i = 0; i < n; i++){
        printf("%d ", a[i]);
    }
}
 
void swap(int* x, int* y){
    int t = *x;
    *x = *y;
    *y = t;
}
 
void sortArray(int* a, int n){
    int i, j;
    for(i = 0; i < n - 1; i++){
        for(j = i + 1; j < n; j++){
            if(i % 2 == 0 && j % 2 == 0){
                if(a[i] < a[j]){
                    swap(&a[i], &a[j]);
                }
            }
            if(i % 2 == 1 && j % 2 == 1){
                if(a[i] > a[j]){
                    swap(&a[i], &a[j]);
                }
            }
        }
    }
}

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

  1. Включаем заголовочный файл stdio.h для работы с функциями ввода-вывода и time.h для работы со временем.
  2. Создаем функцию createRandomArray, которая принимает целое число n и возвращает указатель на массив a из n случайно сгенерированных чисел от 0 до 9.
  3. Создаем функцию showArray, которая принимает указатель на массив a и его размер n и выводит все элементы массива через пробел.
  4. Создаем функцию swap, которая принимает указатели на два элемента x и y и меняет их местами.
  5. Создаем функцию sortArray, которая принимает указатель на массив a и его размер n.
  6. Внутри функции sortArray используем два вложенных цикла для прохода по всем элементам массива.
  7. Внутри первого вложенного цикла проверяем, являются ли текущие элементы четными числами (проверяем i % 2 == 0).
  8. Если оба текущих элемента четные, то сравниваем их и, если первый больше второго, меняем их местами с помощью функции swap.
  9. Если оба текущих элемента нечетные, то сравниваем их и, если первый меньше второго, меняем их местами с помощью функции swap.
  10. Внешний цикл продолжается до тех пор, пока не будет выполнено условие i < n - 1.
  11. После завершения внутреннего цикла, массив отсортирован по условию задачи.
  12. В функции main считываем размер массива n с помощью функции scanf.
  13. Задаем начальное значение для генератора случайных чисел с помощью функции srand(time(0)).
  14. Создаем массив с помощью функции createRandomArray(n).
  15. Выводим массив на экран с помощью функции showArray(arr, n).
  16. Сортируем массив с помощью функции sortArray(arr, n).
  17. Выводим отсортированный массив на экран с помощью функции showArray(arr, n).
  18. Освобождаем память, выделенную под массив, с помощью функции free(arr).
  19. Завершаем программу с помощью оператора return 0.

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


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

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

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