С иллюстрациями. Иллюстрации "моргают".

Сортировка вставками

N = 100;
a = round(100*rand(1,N));

h = plot(a,'.');
for i = 2:N % i - номер прохода
    x = a(i);
    % поиск места элемента в готовой последовательности
    j = i-1; 
    while (j >= 1) & (a(j) > x)
        a(j+1) = a(j); % сдвигаем элемент направо, пока не дошли
        j = j-1; 
    end
    % место найдено, вставить элемент
    a(j+1) = x;
    set(h,'YData',a);
    pause(0.25);
    drawnow;
end

insert.gif

Сортировка методом "пузырька"

N = 10000;
a = round(N*rand(1,N));

h = plot(a,'.');
tic;
for i = 2:N % (i-1) - номер прохода
    for j = N:-1:i  % внутренний цикл прохода
        if a(j-1) > a(j)
           x=a(j-1); a(j-1)=a(j); a(j)=x; 
        end
    end
    set(h,'YData',a);
%     pause(0.25);
    drawnow;
end
time = toc;
text(0.1*N,N-0.1*N,['Vremya sortirovki = ' num2str(time)])

bubble.gif

Сортировка выбором

N = 100;
a = round(100*rand(1,N));

h = plot(a,'.');
for i = 1:N % i - номер шага
    k = i; x = a(i); % k - индекс наименьшего элемента
    for j = i+1:N  % цикл выбора наименьшего элемента
        if a(j) < x
           k=j; x=a(j); 
        end
    end
    a(k) = a(i); a(i) = x;
    set(h,'YData',a);
    pause(0.25);
    drawnow;
end

select.gif

Быстрая сортировка

"Вызывалка"

N = 500;
a = round(N*rand(1,N));
tic;
a = dqsort(a,1,N);
time = toc;
text(0.1*N,N-0.1*N,['Vremya sortirovki = ' num2str(time)])

и сама функция

function a = dqsort(a,left,right)
h = plot(a,'.');
i = left; j = right; % поставить указатели на исходные места
p = a(round((left+right)/2));    % центральный элемент

% процедура разделения

while i <= j
    while ( a(i) < p )
        i = i+1;
    end
    while ( a(j) > p )
        j = j-1;
    end

    if i <= j
        temp = a(i); a(i) = a(j); a(j) = temp;
        i=i+1; j=j-1;
    end
end    
    set(h,'YData',a);
    pause(0.25)
    drawnow;
% рекурсивные вызовы, если есть, что сортировать 
if j > left
    a = dqsort(a, left, j);
end
if i < right 
    a = dqsort(a, i,right);
end

quick.gif

Скачать код примеров



Комментарии

comments powered by Disqus