Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Указатели


Автор: Garabar 9.9.2005, 16:04
Дравствуйте уважаемые люди.
Никак не могу справица с одной достаточно простой задачкой, синтакс не догоняю видимо, короче нужно следующее:
Есть некий массив, и нужно элементы этого массива поменять местами(попарно), дык вот, как наиболее быстро с точки зрения компа энто сделать, хотел через указатели но чето ламоват я видно пака, поскажите люди добрые во блага науки и техники..
Спасибо

Автор: _hunter 9.9.2005, 16:18
с точки зрения компа быстрее всего это сделать через правельный алгоритм.
указатели перестановку двух элементов не заоптимизируют

Автор: Guest 9.9.2005, 21:31
Цитата(_hunter @ 9.9.2005, 16:18)
указатели перестановку двух элементов не заоптимизируют

А можно ли поменять адреса к элементам массивов местами?

Автор: Snowy 9.9.2005, 21:53
Цитата(Guest @ 9.9.2005, 21:31)
А можно ли поменять адреса к элементам массивов местами?

Адреса у указателей можно.
Но данные останутся на тех же местах -> массив это не изменит.

Автор: Girder 10.9.2005, 00:34
Массив данных трогать... на надо smile

Надо индексы(указатели) перегруперовать или накладывать новую таблицу индексов(указатель). Если нет необходимости оставлять изначальную последовательность индексации... то быстрее будет перегруперовать.

Автор: Garabar 13.9.2005, 11:33
Цитата(Girder @ 10.9.2005, 00:34)
Надо индексы(указатели) перегруперовать или накладывать новую таблицу индексов(указатель). Если нет необходимости оставлять изначальную последовательность индексации... то быстрее будет перегруперовать


А можно пример кода пожалста...

Автор: Girder 14.9.2005, 03:20
Код
//некий массив данных
const
 Str:string=('X'+#0+'XX'+#0+'XXX'+#0+'XXXX'+#0+'XXXXX'+#0);

procedure TForm1.Button1Click(Sender: TObject);
var j,i:integer;
    i1,i2:array [1..5] of PChar;
    p:PChar;
begin
 Memo1.Clear;
 i1[1]:=PChar(@Str[1]);
//Накладываем первичную таблицу.
 i:=2;
 for j:=1 to Length(Str)-1 do
  if Str[j]=#0 then
   begin
    i1[i]:=PChar(@Str[j+1]);
    inc(i);
   end;
//Выводим результат по первичной таблице
 for j:=1 to 5 do Memo1.Lines.Add(i1[j]);
//Перегрупперовываем первичную таблицу
 i:=1;
 j:=5;
 repeat
  p:=i1[i];
  i1[i]:=i1[j];
  i1[j]:=p;
  inc(i);
  dec(j);
 until (j=i);
//Выводим результат по первичной таблице
 for j:=1 to 5 do Memo1.Lines.Add(i1[j]);
//Накладываем вторуй таблицу исходя из указателей в первичной таблице
 for j:=1 to 5 do i2[j]:=i1[6-j];
//Выводим результат по второй таблице
 for j:=1 to 5 do Memo1.Lines.Add(i2[j]);
//Накладываем вторичную таблицу индексов на вторую таблицу
 for j:=1 to 5 do i3[j]:=6-j;
//Выводим результат по вторичной таблице
 for j:=1 to 5 do Memo1.Lines.Add(i2[i3[j]]);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)