clc,clear,close all;
disp("4个0-10之间的随机整数组成的行矩阵:")
r = randi([0 10],1,4) %使用randi函数生成在0~10之间均匀分布的4个随机整数
%条件语句冒泡排序行矩阵
n = length(r);
disp("从小到大排序后:")
y = paixu(r,n,0)
disp("从大到小排序后:")
y = paixu(r,n,1)
function y = paixu(x,n,flag) %条件语句实现冒泡排序子函数 flag用于选择排序方式
for i = 2 : n
for j = n : -1 : i
if flag == 0
if x(j) < x(j-1)
x([j,j-1]) = x([j-1,j]);
end
elseif flag == 1
if x(j) > x(j-1)
x([j,j-1]) = x([j-1,j]);
end
end
end
end
y = x; %返回排序结果
end
运行示例:
4个0-10之间的随机整数组成的行矩阵:
r =
3 0 1 9
从小到大排序后:
y =
0 1 3 9
从大到小排序后:
y =
9 3 1 0
就是用行矩阵(行向量)来表示这四个数的大小关系,我这里用1表示最大的,4表示最小的。
本质上就是1,2,3,4这四个数的排列组合,一共有24种排列方式,这里我的逻辑只列举了6种
以第一种为例:第一个数大于第二个数,第二个数大于第三个数,第三个数大于第四个数,那么行矩阵就是[1 2 3 4]
n = [randi([0,10]), randi([0,10]), randi([0,10]), randi([0,10])];
if n(1) >= n(2) && n(2) >= n(3) && n(3) >= n(4)
a = [1, 2, 3, 4];
elseif n(1) >= n(2) && n(2) >= n(4) && n(4) >= n(3)
a = [1, 2, 4, 3];
elseif n(1) >= n(3) && n(3) >= n(2) && n(2) >= n(4)
a = [1, 3, 2, 4];
elseif n(1) >= n(3) && n(3) >= n(4) && n(4) >= n(2)
a = [1, 3, 4, 2];
elseif n(1) >= n(4) && n(4) >= n(2) && n(2) >= n(3)
a = [1, 4, 2, 3];
elseif n(1) >= n(4) && n(4) >= n(3) && n(3) >= n(2)
a = [1, 4, 3, 2];
end
因为题目要求用条件语句比较大小,所以用if-else枚举24种排列应该是题目的本意。这个题其实也从侧面考察你对条件判断的理解。
它的意思就是
第一步:你先生成0~10的整数,生成4个
第二步:将这4个数进行比较大小
第三步:比较之后用行矩阵表示出来。(第三步跟第二步关联不大)
第二步和第三步就像比较几个数大小之后,求一下几个数的和,联系不是很大。
我理解就是,先设定一个数组,14或者22,再生成4个0-10的随机数,没有不重复要求的话,随机执行4次即可,将4个数按先后顺序赋值给数组,然后再给数组排序,从大到小或者从小到大,可以用最常用的冒泡法编写,搞定。