Конференция "Прочее" » Сортировка выбором
 
  • ИванН (09.11.08 15:50) [0]
    У меня есть код сортировки выбором 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;



    Вопрос - зачем сделана такая проверка?

    Спасибо.
  • palva © (09.11.08 16:21) [1]
    Если первый элемент и так оказался минимальным, то переставлять элементы не надо. Можно было не заморачиваться с флагом, а проверять равенство min = i. Если оно выполняется, то это эквивалентно Flag = False.
  • ИванН (09.11.08 16:24) [2]
    Ну получается эта дополнительная проверка не обязательная? Без проверки - если у меня первый окажется минимальным, то просто будет лишняя-пустая перестановка одного и того же, я прав?
  • palva © (09.11.08 18:52) [3]
    Это зависит от того, сколько стоит эта пустая перестановка. Если мы занимаемся сортировкой блоков, расположенных на диске, (какая-нибудь дефрагментация), да еще если обычно блоки УЖЕ лежат как надо, и перемещать их не требуется, то такая проверка будет уместна для эффективности работы, хотя на результат работы она не повлияет.
  • TUser © (09.11.08 20:50) [4]
    Добавлю, что если речь идет о лбой сортиовке, где важно время, такой алгоритм всегда крайне неэффективен. Хоть бы даже  с флагом.
 
Конференция "Прочее" » Сортировка выбором
Есть новые Нет новых   [134446   +31][b:0][p:0.001]