我需要编写一个嵌入了quicksort算法的递归函数。 我在更新新边界时遇到了麻烦。 y是一个矩阵,m是需要排序的行的数量。请帮助...
function [y]=quicksort(y,left,right,m)
i=left;
j=right;
num=randi(length(y)); % pick a random element in the array as pivot
pivot=y(m,num);
if i <= j %find the element fits criteria below before i overlaps j.
while y(m,i) < pivot
i = i + 1;
end
while y(m,j) > pivot
j = j - 1;
end
ytmp=y(:,j);
y(:,j)=y(:,i);
y(:,i)=ytmp;
i = i + 1;
j = j - 1;
%swap the positions of the two elements when y(m,j) < pivot < y(m,i)
else
return
end
return
[y]=quicksort(y,i,right,m); %update the boundaries.
[y]=quicksort(y,left,j,m); %recursively call the function.
答案 0 :(得分:0)
你做错了。但是,由于这似乎是作业,我会给你一些具体的提示和例子,而不是直接发布正确的答案。我还将此限制为单个向量,以使答案更简单,更简洁。
首先,您要交换位于pivot元素错误一侧的所有元素,而不仅仅是第一个元素。所以提示是使用while循环。但是你仍然需要在某个地方进行交换,所以你在某个地方也需要一个if语句。其次,最后一次返回将始终执行。这意味着您永远不会输入递归。尝试改为使用一种条件,只有在剩余元素数量为1时才继续迭代。
if (i < right)
y=qsort(y,i,right); %update the boundaries.
end
if (left < j)
y=qsort(y,left,j); %recursively call the function.
end
希望这些信息足够了。祝你好运!