Показать сообщение отдельно

Циклический сдвиг элементов массива вправо на k позиций
  #19  
Старый 19.10.2009, 15:21
Nikituki
Новичок
Регистрация: 14.03.2009
Сообщений: 25
Провел на форуме:
72034

Репутация: 5
Отправить сообщение для Nikituki с помощью ICQ
По умолчанию Циклический сдвиг элементов массива вправо на k позиций

Цитата:
Сообщение от c0n Difesa  
Будет еще замечательней, если другие также будут выкладывать свои алгоритмы (не только базовые, коих хватает в Википедии) с их обзорами.
Ну чтож, попробую, мб кому-нибудь пригодится=)

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

1) Код:
Код:
template <typename MassiveType>
void Shift(MassiveType *Massive, int MassiveLen, int k)
{ 	
        Reverse(Massive,0,MassiveLen-1); //разворачиваем массив   
        Reverse(Massive,0,k-1);  //разворачиваем первые к элементов
	Reverse(Massive,k,MassiveLen-1); //разворачиваем последние n-k эллементов
}

template <typename MassiveType>
void Reverse(MassiveType *Massive, int StartElem, int FinishElem)
{ 	
        int i;
        MassiveType tresh; 	
        for (i=0;i<=(FinishElem-StartElem)/2;i++) 
        {
                  tresh=Massive[StartElem+i]; 	 
                  Massive[StartElem+i]=Massive[FinishElem-i]; 		       
                  Massive[FinishElem-i]=tresh; 	
        } 
}
2) Особенности:

Не используется выделение больших объемов дополнительной памяти.

3) Временная сложность:

Во всех случаях Т(n) = О(N)

Последний раз редактировалось Nikituki; 19.10.2009 в 15:33..
 
Ответить с цитированием