Пузырьковая сортировка, сортировать только только четные элементы - C (СИ)

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

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

Пожалуйста помогите переделать эту пузырьковую сортировку так, чтобы она сортировала только четные элементы массива, а нечетные оставляла на своих местах. Например 13 7 14 6 2 9 3 превращала в 13 7 2 6 14 9 3. Буду очень благодарен если и комментарии напишите.
void BubbleSort(int *a, const int n)
{
    int i, r, flag;
    double buf;
    flag = 1;
    r = n;
    while (flag)
        {
            flag = 0;
            for (i = 1; i < r; i++)
                if (a[i] < a[i - 1]) 
                {
                    buf = a[i];
                    a[i] = a[i - 1];
                    a[i - 1] = buf;
                    flag = 1;
                }
            r--;
    }
}

Решение задачи: «Пузырьковая сортировка, сортировать только только четные элементы»

textual
Листинг программы
#include <cstdio>
#include <cstdlib> 
 
void swap(int * a, int * b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
 
int main()
{
    int n;
    printf("Enter n: ");
    scanf("%d", &n);
 
    // allocate memory
    int * a = (int*)malloc(sizeof(int) * n);
 
    // input array
    int i, j, k, temp;
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
 
    // bubble sort
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if ((a[j] > a[j + 1]) && (a[j] % 2 == 0) && (a[j + 1] % 2 == 0))
            {
                swap(&a[j], &a[j + 1]);
            }
            else if ((a[j] % 2 == 0) && (a[j + 1] % 2 != 0))
            {
                for (k = j + 2; k < n; k++)
                    if (a[j] > a[k] && a[k] % 2 == 0)
                    {
                        swap(&a[j], &a[k]);
                        break;
                    }
            }
        }
    }
 
    // output array
    for (i = 0; i < n - 1; i++)
        printf("%d ", a[i]);
    printf("%d\n", a[n -1]);
 
    // free memory
    a = (int*)realloc(a, 0);
 
    system("pause");
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы для работы с памятью и вводом/выводом данных
  2. Определяется функция swap, которая меняет местами два указателя на int
  3. В функции main считывается количество элементов для сортировки
  4. Выделяется память под массив целых чисел, считываются сами числа и сохраняются в массиве
  5. Производится сортировка по алгоритму пузырьковой сортировки, но с условием, что четные числа меняются местами только с четными, нечетные с нечетными
  6. Выводится отсортированный массив на экран
  7. Освобождается память, выделенная под массив
  8. Программа ожидает нажатия клавиши для продолжения работы
  9. Возвращается 0, что означает успешное выполнение программы

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


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

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

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