Массивы. Циклические сдвиги, сжатие

Слайд 2

Алгоритм циклического сдвига на k позиций.

I способ
определить сколько раз необходимо произвести одноэлементный

Алгоритм циклического сдвига на k позиций. I способ определить сколько раз необходимо
сдвиг
k := k % n;
k раз применить одноэлементный сдвиг
Алгоритм одноэлементного сдвига.

Запомнить в дополнительной ячейке первый (или последний) элемент массива
Сдвинуть все элементы влево (вправо)
На последнее (первое) место записать тот, который запоминали.

Слайд 3

Сдвиг вправо и влево

n=int(input())
a=[5]*n
for i in range(n):
a[i]=int(input())
print(a)
k=int(input())
k=k%n
for i in range(k):
t=a[0]

Сдвиг вправо и влево n=int(input()) a=[5]*n for i in range(n): a[i]=int(input()) print(a)
for j in range(n-1):
a[j]=a[j+1]
a[n-1]=t
print(a)

Слайд 4

II способ
Скопировать первые k элементов массива во временный массив
Сдвинуть оставшиеся n-k

II способ Скопировать первые k элементов массива во временный массив Сдвинуть оставшиеся
элементов влево на k позиций
Скопировать данные из временного массива обратно в основной массив на последние k позиций

Слайд 5

III способ

отобразить элементы массива(0, k-1)
отобразить элементы массива (k, n-1)
отобразить элементы массива (0,

III способ отобразить элементы массива(0, k-1) отобразить элементы массива (k, n-1) отобразить элементы массива (0, n-1)
n-1)

Слайд 6

j-сколько раз произвести обмен, left - левая граница отображения, right - правая

j-сколько раз произвести обмен, left - левая граница отображения, right - правая
граница отображения,
Dlina - длина отображаемой части массива
j=1 left=0 right=k-1 dlina=right-left+1
(***) while j<=dlina // 2 :
temp=a[left]
a[left]=a[right]
a[right]=temp
left+=1
right-=1
j+=1
j=1 left=k right=n-1 dlina=right-left+1
(***) {повторить цикл}
j=1 left=0 right=n-1 dlina=right-left+1
(***) {повторить цикл}
Имя файла: Массивы.-Циклические-сдвиги,-сжатие.pptx
Количество просмотров: 21
Количество скачиваний: 0