В канонических реализациях алгоритма Hoare нам нужны начальные и конечные элементы массива в качестве аргументов, а algo поддерживает пару флагов для начала и конца многораздельного массива. Вот некоторые стандартные impls я нашел: QuickSort and Hoare Partition Hoare Partition Correctness in javaРаздел Hoare: эта реализация более/менее эффективна, чем стандартный алгоритм разбиения?
Теперь, я сделал следующее, и протестировали его с несколькими случайными массивами. Я не совсем уверен, что я сделал что-то не так - есть ли какие-то недостатки в этой реализации? Это как бы интуитивно чувствует себя очень похоже на вышеприведенные реализации, за исключением того факта, что он принимает меньше аргументов. Имеет ли она лучшую/худшую производительность (даже незначительно) по сравнению со стандартной реализацией? (Несмотря на то, да, оба из них O (п))
(MATLAB)
function partition(m_input)
pivot = m_input(1);
size = length(m_input);
flag = 1;
k = 1;
while(k<=size)
if(m_input(k)>pivot)
swap(m_input(size), m_input(k))
size = size-1;
else
swap(m_input(k), m_input(flag))
flag =k;
k=k+1;
end
end
end
Edit: вход изменен m_input.
Предложение. Это вряд ли повредит что-либо, но вы все еще можете не иметь переменную с именем 'input', которая также является именем [общей функции, используемой для получения пользовательского ввода] (http://www.mathworks.com/help /matlab/ref/input.html). – horchler
Хорошая точка. Нужно отметить и отредактировать :) – aspen100