quicksort matlab,递归函数

时间:2015-09-28 03:18:18

标签: matlab recursion

我需要编写一个嵌入了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.

1 个答案:

答案 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

希望这些信息足够了。祝你好运!