第二个是 Selection Sort
我按照 Selection Sort 编写的代码如下
--------------------------------------------------------------------------------------------------------------------------------
% Selection Sort 算法的基本思路是搜索整个数组,找到最小的那个数,并将其移到数组的最前面
% 然后找第二小的那个数,然后将其移到数组的第二位
% 循环上面的操作,直到完成整个数组的比较和排序
% 可以从第一个数开始,将其和第二个数比较,如果第二个数比第一个数小,则将当前操作数换为第二个数,然后将第二个数和后面的数比较
% 当和整个数组的数都比较完成后,当前操作数就是最小的那个数,将其和第一个数相交换
% 第二小的数可以从第二个数开始,其余操作一致。
arrayNum = randi(100, 1, 20);
lenNum = length(arrayNum);
disp('Before sorting:');
disp(arrayNum);
for i = 1:lenNum
currNumIndex = i;
for j = 1:(lenNum-i)
nextNumIndex = i+j;
currNumIndexSwitch = compareNum(arrayNum(currNumIndex), arrayNum(nextNumIndex));
if currNumIndexSwitch == 1 % 如果返回值为1,则提示当前数比其后面的数大,因此将当前数改为后面的这个更小的数,直到比较完整个数组,得到第i小的数
currNumIndex = nextNumIndex;
end
end
tempNum = arrayNum(i);
arrayNum(i) = arrayNum(currNumIndex); % 将筛选比较后发现的第i小数排到第i位。
arrayNum(currNumIndex) = tempNum;
disp(arrayNum);
end
disp('After sorting:');
disp(arrayNum);
function currLessNumIndexSwitch = compareNum(num1, num2) % 如果两数比较大小后需要交换,则返回1,否则返回0
if num1 <= num2
currLessNumIndexSwitch = 0;
else
currLessNumIndexSwitch = 1;
end
end
------------------------------------------------------------------------------------------------------------------------------
Before sorting:
52 37 74 53 81 82 19 13 83 64 2 90 52 55 61 77 86 39 9 74
2 37 74 53 81 82 19 13 83 64 52 90 52 55 61 77 86 39 9 74
2 9 74 53 81 82 19 13 83 64 52 90 52 55 61 77 86 39 37 74
2 9 13 53 81 82 19 74 83 64 52 90 52 55 61 77 86 39 37 74
2 9 13 19 81 82 53 74 83 64 52 90 52 55 61 77 86 39 37 74
2 9 13 19 37 82 53 74 83 64 52 90 52 55 61 77 86 39 81 74
2 9 13 19 37 39 53 74 83 64 52 90 52 55 61 77 86 82 81 74
2 9 13 19 37 39 52 74 83 64 53 90 52 55 61 77 86 82 81 74
2 9 13 19 37 39 52 52 83 64 53 90 74 55 61 77 86 82 81 74
2 9 13 19 37 39 52 52 53 64 83 90 74 55 61 77 86 82 81 74
2 9 13 19 37 39 52 52 53 55 83 90 74 64 61 77 86 82 81 74
2 9 13 19 37 39 52 52 53 55 61 90 74 64 83 77 86 82 81 74
2 9 13 19 37 39 52 52 53 55 61 64 74 90 83 77 86 82 81 74
2 9 13 19 37 39 52 52 53 55 61 64 74 90 83 77 86 82 81 74
2 9 13 19 37 39 52 52 53 55 61 64 74 74 83 77 86 82 81 90
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 83 86 82 81 90
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 81 86 82 83 90
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 81 82 86 83 90
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 81 82 83 86 90
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 81 82 83 86 90
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 81 82 83 86 90
After sorting:
2 9 13 19 37 39 52 52 53 55 61 64 74 74 77 81 82 83 86 90