2016-02-15 1 views
1

Я взял курс алгоритма, в котором инструктор решил использовать Ada в качестве инструмента языка программирования, чтобы проверить наше понимание. Аргументом было то, что язык ADA довольно близок к псевдокоду, который появляется в книге CLRS.Перемещение массива от данного индекса к первому

Ниже код является надрезом для этакого выбора в АДА:

procedure Selection_Sort(Data : in out List) is 
    begin 
     for Destination_Index in Data'Range loop 
     for Source_Index in Destination_Index + 1 .. Data'Last loop 
      if Data(Source_Index) < Data(Destination_Index) then 
       Swap(Data, Source_Index, Destination_Index); 
      end if; 
     end loop; 
     end loop; 
    end Selection_Sort; 

Следующие:

for Source_Index in Destination_Index + 1 .. Data'Last loop 

приведет обход массива из данного элемента (Data 1) до последнего элемента, однако если Я хочу перейти от последнего элемента к первому, следующие, похоже, не работают.

for Source_Index in Data'Last .. Data'First loop 

Было бы большую помощь, если кто-то может помочь мне с этой тривиальной проблемой, так что я могу получить с главной проблемой под рукой, которая алгоритмов обучения.

ответ

5

A A .. B, имеющий A > B, приводит к пустому диапазону. В отношении цикла for существует ключевое слово reverse для определения нисходящего цикла (конец ARM 5.5 (9)). Следовательно, reverse A .. B, где A < B, приведет к зацикливанию от B до A.

Остальное остается за вами ради обучения. Чтобы научиться чему-то, вы не можете избежать обучения в первую очередь.

+1

Более того, нисходящий диапазон ('для J в 10 .. 0') пуст, так что цикл проходит в нулевое время. –

+0

@SimonWright Вот что я имел в виду под термином «Это привело бы к пустым диапазонам». Не стесняйтесь редактировать и уточнять мой ответ, если это неясно. –

+0

@SimonWright Я думаю, что в соответствии с примечанием 7 (§ 12) для обратного диапазона требуется 'A

 Смежные вопросы

  • Нет связанных вопросов^_^