Пузырьковая сортировка, сортировать только только четные элементы - 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, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д