Сортировка четных элементов массива по возрастанию, а нечетных-по убыванию - 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]); } } } } }
Объяснение кода листинга программы
- Включаем заголовочный файл
stdio.h
для работы с функциями ввода-вывода иtime.h
для работы со временем. - Создаем функцию
createRandomArray
, которая принимает целое числоn
и возвращает указатель на массивa
изn
случайно сгенерированных чисел от 0 до 9. - Создаем функцию
showArray
, которая принимает указатель на массивa
и его размерn
и выводит все элементы массива через пробел. - Создаем функцию
swap
, которая принимает указатели на два элементаx
иy
и меняет их местами. - Создаем функцию
sortArray
, которая принимает указатель на массивa
и его размерn
. - Внутри функции
sortArray
используем два вложенных цикла для прохода по всем элементам массива. - Внутри первого вложенного цикла проверяем, являются ли текущие элементы четными числами (проверяем
i % 2 == 0
). - Если оба текущих элемента четные, то сравниваем их и, если первый больше второго, меняем их местами с помощью функции
swap
. - Если оба текущих элемента нечетные, то сравниваем их и, если первый меньше второго, меняем их местами с помощью функции
swap
. - Внешний цикл продолжается до тех пор, пока не будет выполнено условие
i < n - 1
. - После завершения внутреннего цикла, массив отсортирован по условию задачи.
- В функции
main
считываем размер массиваn
с помощью функцииscanf
. - Задаем начальное значение для генератора случайных чисел с помощью функции
srand(time(0))
. - Создаем массив с помощью функции
createRandomArray(n)
. - Выводим массив на экран с помощью функции
showArray(arr, n)
. - Сортируем массив с помощью функции
sortArray(arr, n)
. - Выводим отсортированный массив на экран с помощью функции
showArray(arr, n)
. - Освобождаем память, выделенную под массив, с помощью функции
free(arr)
. - Завершаем программу с помощью оператора
return 0
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д