Отсортировать данный массив таким образом, чтобы все нули находились в начале, а единицы - в конце массива - C (СИ)
Формулировка задачи:
Элементами массива IM(N) являются числа 0 и 1. Отсортировать этот массив таким образом, чтобы все нули находились в начале, а единицы - в конце массива. Дополнительный массив не заводить.
Помогите пожалуйста!
Решение задачи: «Отсортировать данный массив таким образом, чтобы все нули находились в начале, а единицы - в конце массива»
textual
Листинг программы
void foo (int *beg, int *end)
{
while (beg != end)
{
if (*beg == 1)
{
*end += *beg;
*beg = *end - *beg;
*end -= *beg;
--end; --beg;
}
++beg;
}
}
Объяснение кода листинга программы
В данном коде реализован алгоритм сортировки, который переставляет нули и единицы в заданном массиве таким образом, чтобы все нули находились в начале, а единицы - в конце.
- Входные данные:
- beg: указатель на первый элемент массива (начало).
- end: указатель на последний элемент массива (конец).
- Тело цикла while:
- Проверка условия: beg != end, то есть пока beg не станет равным end (то есть пока мы не достигнем конца массива).
- Если значение первого элемента массива равно 1:
- Перемещение значения первого элемента в конец массива: end += beg.
- Перемещение значения первого элемента в начало массива: beg = end - *beg.
- Перемещение значения первого элемента обратно в конец массива: end -= beg.
- Увеличение указателя на первый элемент массива: ++beg.
- Уменьшение указателя на последний элемент массива: --end.
- После выполнения всех операций цикла, получившийся массив будет иметь следующий вид: сначала все нули, затем все единицы. Пример вызова функции: int arr[] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0}; int beg = arr; int end = arr + sizeof(arr) / sizeof(arr[0]) - 1; foo(beg, end); В результате выполнения данного кода, массив arr будет иметь следующий вид: {0, 0, 0, 1, 1, 1, 1, 1, 0, 0}.