Осуществить циклический сдвиг элементов массива влево на M позиций - C (СИ)
Формулировка задачи:
Дан массив N. Осуществить циклический сдвиг элементов массива влево на M позиций. Новый массив заводить нельзя.
Решение задачи: «Осуществить циклический сдвиг элементов массива влево на M позиций»
textual
Листинг программы
#include <stdio.h>
//-----------------------------------------------------------------------------
int* LeftOffset(int array[], size_t size, size_t offset)
{
if (offset == 0)
{
return array;
}
int buff = array[0];
size_t i;
for (i = 1; i < size; ++i)
{
array[i - 1] = array[i];
}
array[size - 1] = buff;
LeftOffset(array, size, offset - 1);
return array;
}
//-----------------------------------------------------------------------------
void Print(const int array[], size_t size)
{
size_t i;
for (i = 0; i < size; ++i)
{
printf("%d, ", array[i]);
}
printf("\b\b \n");
}
//-----------------------------------------------------------------------------
int main()
{
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
LeftOffset(array, 10, 5);
Print(array, 10);
return 0;
}
Объяснение кода листинга программы
В данном коде реализованы две функции:
- Функция
LeftOffsetосуществляет циклический сдвиг элементов массива влево наMпозиций. Перебирает массив от 1-го доM-1-го элемента и меняет их местами с элементами, идущими после них. Последний элемент массива остается на своем месте. ЕслиMравно 0, то функция возвращает исходный массив. Формат вызова функции:LeftOffset(array, size, offset), где:array- указатель на начало массива;size- размер массива;offset- смещение.
- Функция
Printвыводит элементы массива на экран через запятую. Формат вызова функции:Print(array, size), где:array- указатель на начало массива;size- размер массива. В функцииmainсоздается массивarrayразмером 10 и заполняется значениями от 1 до 10. Затем вызывается функцияLeftOffset, которая осуществляет циклический сдвиг элементов массива влево на 5 позиций. После чего вызывается функцияPrint, которая выводит элементы массива на экран. В результате выполнения программы на экран будет выведен массив[10, 5, 4, 3, 2, 1, 6, 7, 8, 9].