配列の最後の値を取得し、その配列で見つかった次に低い値で次の配列を開始する出力を生成しようとしています。次に低い値がない場合は、ループを終了させたいと思います。以下に取得しようとしている回答の例を参照してください。
9.0000 11.0000 5.0000 7.0000 3.0000 7.0100
7.0000 3.0000 7.0100 9.0000 11.0000 5.0000
3.0000 7.0100 9.0000 11.0000 5.0000 7.0000
以下で使用しているコードは、最初の 2 行のみを正しく取得し、最後に奇妙なことを行い、これを修正する方法を考えています。
コード:
clc
a=[9,11,5,7,3,7.01];
[a_sorted, a_idx] = sort(a, 2); %sorts array along with getting index values of numbers
a_sorted=a_sorted'; % sort into col
a_idx=a_idx'; % sort into col
a_val_idx=[a_sorted a_idx]; % combine array
loop_amount=length(find(a<a(end))) %how many values are less than the last value, loop this many times
for yy=1:loop_amount
a_val=find(a_val_idx(:,1)<a(end)); %find idx of next lowest value from end
nxt_low_idx_val=a_val_idx(a_val(end),2) %get idx of the next lowest value from end
b=circshift(a,[0 (length(a)-nxt_low_idx_val+1)])
a=b;
end
私が得る結果は
loop_amount = 3
a =
9.0000 11.0000 5.0000 7.0000 3.0000 7.0100
nxt_low_idx_val = 4
a =
7.0000 3.0000 7.0100 9.0000 11.0000 5.0000
nxt_low_idx_val = 5
a =
11.0000 5.0000 7.0000 3.0000 7.0100 9.0000
nxt_low_idx_val = 6
ご覧のとおり、最後の行は次のようになります
nxt_low_idx_val = 2
3.0000 7.0100 9.0000 11.0000 5.0000 7.0000
これを修正する方法はありますか?
ありがとう