Сортировка четных элементов массива по возрастанию, а нечетных-по убыванию - 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.