Пузырьковая сортировка, сортировать только только четные элементы - 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;
- }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы для работы с памятью и вводом/выводом данных
- Определяется функция swap, которая меняет местами два указателя на int
- В функции main считывается количество элементов для сортировки
- Выделяется память под массив целых чисел, считываются сами числа и сохраняются в массиве
- Производится сортировка по алгоритму пузырьковой сортировки, но с условием, что четные числа меняются местами только с четными, нечетные с нечетными
- Выводится отсортированный массив на экран
- Освобождается память, выделенная под массив
- Программа ожидает нажатия клавиши для продолжения работы
- Возвращается 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д