将1D阵列从最大值排序到最小值

时间:2018-02-08 00:00:36

标签: matlab

以下问题不适用于学校/大学,而是我尝试练习一些随机编写的问题,以便为即将到来的考试做好准备。

话虽如此,我目前仍在使用我正在尝试编写的函数。

该函数应该接受一个数组的输入并重新排序'数组中的所有元素从最大到最小。

我的方法是使用双循环,遍历数组中的每个元素,一次一个,并将其与数组中的每个元素进行比较。

最初,我尝试删除已经排序的每个元素。但是,我开始收到以下错误:

Attempted to access array(4); index out of bounds because numel(array)=3.
Error in maxArray (line 36)
      if array(i) > array(j)

然后我想到可能会创建一个新的数组,我将存储所有的'索引'已经分配并将其与“'最大值”进行比较元素索引并查看是否已分配。如果有功能会忽略它并找到下一个最好的'最大值'要放入新数组的元素。

但是,我无法弄清楚如何做到这一点。

在大学里,我们还没有涵盖大部分内置功能。我知道您可以使用sort为您完成这项工作。但是,我们鼓励使用我们自己构建的功能。

非常感谢任何帮助!

1 个答案:

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