我使用MATLAB制作了“合并排序”算法。但不是O(N * log(N))

时间:2015-09-21 13:04:24

标签: matlab mergesort

我使用MATLAB进行了Merge排序。

我试图禁止 - 元素##经过时间。

但是图表就像y = x。请帮帮我TT

我的代码如下

function result = Merge_sort2(input, p, r)
global A;
A = input;
if p < r
    q = floor((p+r)/2);
    Merge_sort2(A, p, q);
    Merge_sort2(A, q+1, r);
    Merge2(p, q, r);
end
result = A;
end

function Merge2(p, q, r)
global A;
n1 = q - p + 1;
n2 = r - q;
L = [];
R = [];
for i = 1 : n1
    L(i) = A(p+i-1);
end

for j = 1 : n2
    R(j) = A(q+j);
end

L(n1+1) = inf;
R(n2+1) = inf;

i = 1;
j = 1;

for k = p : r
    if L(i) <= R(j)
        A(k) = L(i);
        i = i + 1;
    else
        A(k) = R(j);
        j = j + 1;
    end
end
end

下一个代码是查找运行时代码。

function Running_time2(func, incr, num)

y = [];
max = incr * num;

for i = incr : incr : max
    data = i:-1:1;
    len = length(data);

    a = tic;
    res = func(data, 1, len);
    elapsed = toc(a);

    y = [y elapsed];
    fprintf('[The number of elements: %d]\t', i);
    fprintf('[Elapsed time: %fs]\n', elapsed);
end

x = incr : incr: max;
bar(x, y);
end

我在MATLAB的命令窗口输入。

Running_time2(@Merge_sort2, 10, 300)

图表结果如下: enter image description here

0 个答案:

没有答案