Дан одномерный массив. Все его элементы, не равные нулю, переписать(сохраняя их порядок) в начало массива,а нулевые элементы в конец массива (Новый массив не заводить).
APAL
15.05.2006 2:32
Вроде так...
For i:=2 to Max-1 do For j:=Max downto i do If M[j-1]=0 then Begin k:=M[j-1]; M[j-1]:=M[j]; M[j]:=k; End;
Смени название топика!
Zxzc
15.05.2006 3:20
Верно, но почему to Max-1? А если 0 - первый элемент? Что мешает написать to Max ?!! Тогда все работает.
APAL
15.05.2006 3:35
Ничто не мешает - все дело в оптимизации, можно даже переиначить:
For i:=1 to 10*Max do For j:=Max downto 2 do If M[j-1]=0 then Begin k:=M[j-1]; M[j-1]:=M[j]; M[j]:=k; End;
Цитата
А если 0 - первый элемент?
Если так, то при первом же прогоне цикла этот нуль переместиться ниже (на вторую позицию).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.