以下问题不适用于学校/大学,而是我尝试练习一些随机编写的问题,以便为即将到来的考试做好准备。
话虽如此,我目前仍在使用我正在尝试编写的函数。
该函数应该接受一个数组的输入并重新排序'数组中的所有元素从最大到最小。
我的方法是使用双循环,遍历数组中的每个元素,一次一个,并将其与数组中的每个元素进行比较。
最初,我尝试删除已经排序的每个元素。但是,我开始收到以下错误:
Attempted to access array(4); index out of bounds because numel(array)=3.
Error in maxArray (line 36)
if array(i) > array(j)
然后我想到可能会创建一个新的数组,我将存储所有的'索引'已经分配并将其与“'最大值”进行比较元素索引并查看是否已分配。如果有功能会忽略它并找到下一个最好的'最大值'要放入新数组的元素。
但是,我无法弄清楚如何做到这一点。
在大学里,我们还没有涵盖大部分内置功能。我知道您可以使用sort
为您完成这项工作。但是,我们鼓励使用我们自己构建的功能。
非常感谢任何帮助!
答案 0 :(得分:1)
感谢Cris Luengo的建议。我能够通过交换数组中的元素来解决问题。
% Process to calculate the length of the array.
lenArray = length(array);
% If the array is empty, display an appropriate message.
if lenArray == 0
error('The array provided is empty.')
end
% Initialise an empty array to store the two elements that are being
% compared.
compareArray = [];
% Go through every index in the new array.
for i = 1:lenArray
% Compare each element in the array, index 'i', with every other
% element in the array.
for j = i+1:lenArray
% Check to see if the current element 'j' is greater than the
% current element 'i'.
if array(j) > array(i)
% Add the two elements to 'compareArray'.
compareArray(1) = array(j);
compareArray(2) = array(i);
% Swap the two elements in the initial array.
array(i) = compareArray(1);
array(j) = compareArray(2);
end
end
end