Пузырьковая сортировка, сортировать только только четные элементы - 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, что означает успешное выполнение программы