-
У меня есть код сортировки выбором http://ru.wikipedia.org/wiki/Сортировка_выбором , но в коде есть странное место, не соответствующее алгоритму описанному на википедии, а именно: for i := 1 to n - 1 do
begin
min := i;
Flag := False;
for j := i + 1 to n do
if a[min] > a[j] then
begin
min := j;
Flag := True;
end;
if Flag then
begin
t := a[i];
a[i] := a[min];
a[min] := t;
end;
end; Вопрос - зачем сделана такая проверка? Спасибо.
-
Если первый элемент и так оказался минимальным, то переставлять элементы не надо. Можно было не заморачиваться с флагом, а проверять равенство min = i. Если оно выполняется, то это эквивалентно Flag = False.
-
Ну получается эта дополнительная проверка не обязательная? Без проверки - если у меня первый окажется минимальным, то просто будет лишняя-пустая перестановка одного и того же, я прав?
-
Это зависит от того, сколько стоит эта пустая перестановка. Если мы занимаемся сортировкой блоков, расположенных на диске, (какая-нибудь дефрагментация), да еще если обычно блоки УЖЕ лежат как надо, и перемещать их не требуется, то такая проверка будет уместна для эффективности работы, хотя на результат работы она не повлияет.
-
Добавлю, что если речь идет о лбой сортиовке, где важно время, такой алгоритм всегда крайне неэффективен. Хоть бы даже с флагом.
|